onNewIntent()生命周期和已注册的侦听器

时间:2011-12-23 19:26:24

标签: android android-intent lifecycle

我正在使用singleTop活动通过onNewIntent()从搜索对话框接收意图。

我注意到onPause()onNewIntent()之前调用,然后调用onResume()。目测:

  • 已启动搜索对话框
  • 搜索意图触发活动
  • onPause()
  • onNewIntent()
  • onResume()

问题在于我在onResume()中注册了已在onPause()中删除的侦听器,但在onNewIntent()调用中需要它们。有没有一种标准方法可以让这些听众可用?

2 个答案:

答案 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
}