首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >onNewIntent()生命周期和注册的侦听器

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

Stack Overflow用户
提问于 2011-12-24 03:26:24
回答 2查看 107.9K关注 0票数 159

我正在使用一个singleTop活动通过onNewIntent()接收来自搜索对话框的意图。

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

触发到activity

  • onPause()

  • onNewIntent()

  • onResume()

的initiated

  • search intent
  • search对话框

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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()中。

票数 312
EN

Stack Overflow用户

发布于 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
}
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8619883

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档