onNewIntent()生命周期和注册监听器

我正在使用oneTop Activity通过onNewIntent()从search对话框接收意图。

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

  • search对话框启动
  • search意图激发到活动
  • onPause()
  • onNewIntent()
  • onResume()

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

onNewIntent()意味着已经在堆栈中其他地方运行的singleTop活动的入口点,因此不能调用onCreate() 。 从活动生命周期的angular度来看,因此需要在onNewIntent()之前调用onPause() onNewIntent() 。 我build议你重写你的活动,不要在onNewIntent()使用这些监听器。 例如,大部分时间我的onNewIntent()方法看起来像这样:

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

通过使用getIntent()onResume()发生所有设置逻辑。

除了第一次创build活动时,OnNewIntent()始终会被调用singleTop / Task活动。 当时在创造被称为。

你总是可以通过将onNewIntent方法放入onCreate方法来调用

 @Override public void onCreate(Bundle savedState) { super.onCreate(savedState); onNewIntent(getIntent()); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); //code }