Android中的请求代码值有什么建议吗?
现在我使用随机数作为请求代码。因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突。是否有任何定义价值的实践,设计不可冲突?Android中的请求代码值有什么建议吗?,android,Android,现在我使用随机数作为请求代码。因此,每次我为startActivityForResult添加新活动时,我都需要检查所有其他此类活动以避免冲突。是否有任何定义价值的实践,设计不可冲突? 你认为呢?增加一个数字可以保证不会发生碰撞(直到包装完成)。实际上应该 除非你大量使用它们,否则不会发生 您可以向项目中添加一个类,该类为您提供编号。比如说 public class GlobalStuff { private static final AtomicInteger seed = new At
你认为呢?增加一个数字可以保证不会发生碰撞(直到包装完成)。实际上应该 除非你大量使用它们,否则不会发生 您可以向项目中添加一个类,该类为您提供编号。比如说
public class GlobalStuff {
private static final AtomicInteger seed = new AtomicInteger();
public static int getFreshInt() {
return seed.incrementAndGet();
}
}
现在,在您的代码中,当您需要使用数字而不是
public void doSomething() {
startActivityForResult(intentA, 342);
}
喜欢吗
private static final int REQUEST_CODE = GlobalStuff.getFreshInt();
public void doSomething() {
startActivityForResult(intentA, REQUEST_CODE);
}
你不用同一个号码打两次就安全了。至少当代码在同一进程中运行时
唯一的问题是,您不能在
switch
语句中使用这些数字(如case REQUEST\u code:
),因为switch需要编译时已知的数字,实际上您不需要检查所有的活动,如果在不同的活动中有相同的值,也没什么关系
请求代码的思想是,在Activity X中,在ActivityResult()中,您可以区分以startActivityForResult()开始的不同请求的结果
因此,如果在“活动”中有3个不同的startActivityForResult()
调用,则需要3个不同的请求代码,以便能够在onActivityResult()
中区分它们,这样您就可以知道哪个结果属于哪个开始。但是,如果您有另一个活动Y,您正在做类似的事情,那么当请求代码与活动X中的代码相同时,这并不重要。如果您仍然需要检查一个活动的结果,并且喜欢视觉抛光的结构,请检查此方法
在活动类内声明内部类:
class RequestCode {
static final int IMPORT = 100;
static final int WRITE_PERMISSION = 101;
}
启动活动时使用代码:
startActivityForResult(intent, RequestCode.IMPORT);
检查结果:
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RequestCode.IMPORT && resultCode == RESULT_OK) {
//...
}
}
我只使用随机数(在编译时生成),从来没有遇到过任何问题-但这是一个好问题。您可以在全局hashmap的帮助下在switch语句中使用它,可能吗?这种方法非常有效。。直到第三方库决定执行类似操作为止。@S.D.什么样的库可以在没有您管理的情况下启动活动?@atasoyh none,当您将库添加到随机启动活动的项目中时,这只是一个假设问题。有些库可以启动zxing条形码扫描仪之类的活动,但您可以控制它是如何启动的。在几乎所有情况下,使用什么请求代码也不相关。只需放置0,您无需区分活动结果这是一个非常糟糕的解决方案,因为根据用户所做的操作,代码可能会有所不同。此外,如果进程被终止,它也不能正常工作。想象一下,你开始了一项活动,结果是挑选一张照片,系统杀死了你的应用程序,你检查了请求代码,结果不匹配。这是一个很好的答案。它触及了问题的根源,这就是理解为什么您首先需要请求代码,并且它们不需要是全局唯一的。这可能在文档中的某个地方,但如果是,我没有看到。尽管这个答案是有效的,但我认为在所有活动中始终使用不同的REQUEST\u code
是一种良好的做法。无论何时将功能导入到“活动”中,都需要确保请求代码不同,而无需检查该特定“活动”中的所有startActivityForResult()
调用/fragments@MarioLenci但要获得所有不同的请求代码,您必须检查所有startActivityForResult()在你所有的活动和片段中,而不仅仅是一个。