我正在使用一个singleTop活动通过onNewIntent()
接收来自搜索对话框的意图。
我注意到的是,onPause()
在onNewIntent()
之前被调用,之后它调用onResume()
。视觉上:
触发到activity
onPause()
onNewIntent()
onResume()
的initiated
问题是我在onResume()
中注册的侦听器在onPause()
中被删除了,但是在onNewIntent()
调用中需要它们。有没有一种标准的方法来让这些监听器可用?
发布于 2012-01-17 22:55:35
onNewIntent()
是作为singleTop活动的入口点,这些活动已经在堆栈中的其他位置运行,因此不能调用onCreate()
。因此,从活动生命周期的角度来看,需要在调用onNewIntent()
之前调用onPause()
。我建议你重写你的activity,在onNewIntent()
中不使用这些监听器。例如,大多数情况下,我的onNewIntent()
方法看起来就像这样:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// getIntent() should always return the most recent
setIntent(intent);
}
通过利用getIntent()
,所有设置逻辑都发生在onResume()
中。
发布于 2012-11-21 19:11:00
注意:从另一个生命周期方法调用一个生命周期方法不是一种好的做法。在下面的示例中,我试图实现无论您的活动类型如何,都将始终调用您的onNewIntent。
除了第一次创建活动之外,总是为singleTop/Task活动调用OnNewIntent()。此时,将调用onCreate来为该线程上请求的少量查询提供解决方案。
您可以通过将onNewIntent放入onCreate方法来调用它,如下所示
@Override
public void onCreate(Bundle savedState){
super.onCreate(savedState);
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//code
}
https://stackoverflow.com/questions/8619883
复制相似问题