OnNewInent()生命周期和注册侦听器

我使用单个 Top Activity 通过 onNewIntent()从搜索对话框接收意图。

我注意到 onPause()onNewIntent()之前被调用,然后它又调用 onResume()。视觉上:

  • 搜索对话框启动
  • 开始搜索
  • onPause()
  • onNewIntent()
  • onResume()

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

115329 次浏览

onNewIntent()意味着作为 singleTop 活动的入口点,这些活动已经在堆栈中的其他地方运行,因此不能调用 onCreate()。从活动生命周期的角度来看,因此需要在 onNewIntent()之前调用 onPause()。我建议您重写您的活动,不要在 onNewIntent()中使用这些侦听器。例如,大多数时候我的 onNewIntent()方法看起来就像这样:

@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
// getIntent() should always return the most recent
setIntent(intent);
}

利用 getIntent()onResume()中实现所有的设置逻辑。

注意: 从另一个方法调用生命周期方法并不是一个好的实践。在下面的例子中,我试图实现不管您的活动类型如何,都将始终调用 onNewInent。

对于 singleTop/Task 活动,除了第一次创建活动时,总是调用 OnNewInent ()。当时,onCreate 被称为提供解决方案,以解决在此线程上询问的少量查询。

您可以通过将其放入 onCreate 方法来调用意图处理程序,如下所示

@Override
public void onCreate(Bundle savedState){
super.onCreate(savedState);
handleIntent(getIntent());
}


@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
handleIntent(intent);
}


protected void handleIntent(Intent intent) {
//code
}