Android-活动意图经历多个启动和停止周期
创建活动时传递的任何意图,或作为Android-活动意图经历多个启动和停止周期,android,android-intent,activity-lifecycle,Android,Android Intent,Activity Lifecycle,创建活动时传递的任何意图,或作为onNewIntent()的参数传递的任何意图,只要活动未被销毁,就有效。好吧,即使是在被摧毁后,但那是另一个问题 我的问题是,在这种情况下,当从后台启动/恢复活动或从“最近的应用程序”部分“创建”活动时,最佳做法是什么,以避免由于旧的意图而导致重复处理 比如说,我拉着getDataString()进行分析,理想情况下,只有当应用程序通过deeplink实际启动时,才能跟踪分析。但是在旧的意图中,每次在onStart()的调用链中,它都非常可用。推荐什么 在onS
onNewIntent()
的参数传递的任何意图,只要活动未被销毁,就有效。好吧,即使是在被摧毁后,但那是另一个问题
我的问题是,在这种情况下,当从后台启动/恢复活动或从“最近的应用程序”部分“创建”活动时,最佳做法是什么,以避免由于旧的意图而导致重复处理
比如说,我拉着getDataString()
进行分析,理想情况下,只有当应用程序通过deeplink
实际启动时,才能跟踪分析。但是在旧的意图中,每次在onStart()
的调用链中,它都非常可用。推荐什么
onStop()
中,是否将意图设置为null//对我来说似乎最合乎逻辑。陷阱onStop()
中设置临时字段以识别它是否为旧字段在尝试了各种案例之后,以下是我的发现。其中一些观点可能最适合我的代码库,但我猜它们一般都适用
onCreate():
onNewIntent():markIntentValuesTracked(false)代码>
onStop():markIntentValuesTracked(true)
private void markIntentValuesTracked(final boolean status){
if(getIntent() != null){
getIntent().putExtra(LAUNCH_INTENT_VALUES_CONSUMED, status);
}
}
boolean isOldIntent = (getIntent().getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0;
markIntentValuesTracked(isOldIntent);