我正在使用singleTop活动通过onNewIntent()
从搜索对话框接收意图。
我注意到onPause()
在onNewIntent()
之前调用,然后调用onResume()
。目测:
onPause()
onNewIntent()
onResume()
问题在于我在onResume()
中注册了已在onPause()
中删除的侦听器,但在onNewIntent()
调用中需要它们。有没有一种标准方法可以让这些听众可用?
答案 0 :(得分:260)
onNewIntent()
表示已经在堆栈中其他位置运行的singleTop活动的入口点,因此无法调用onCreate()
。从活动生命周期的角度来看,因此需要在onPause()
之前调用onNewIntent()
。我建议你重写你的活动,不要在onNewIntent()
内使用这些听众。例如,大多数时候我的onNewIntent()
方法看起来像这样:
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// getIntent() should always return the most recent
setIntent(intent);
}
利用onResume()
在getIntent()
中发生所有设置逻辑。
答案 1 :(得分:13)
注意:从另一个方法调用生命周期方法不是一个好习惯。在下面的示例中,我试图实现无论您的Activity类型如何,都将始终调用onNewIntent。
除了第一次创建活动时,总是会调用onNewIntent()来执行singleTop / Task活动。那时onCreate被称为提供解决方案,在这个线程上询问的几个查询。您可以通过将onNewIntent放入onCreate方法(如
)来调用onNewIntent@Override
public void onCreate(Bundle savedState){
super.onCreate(savedState);
onNewIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
//code
}