【问题标题】:Android: How to set a listener for Acivity.onNewIntent()?Android:如何为 Activity.onNewIntent() 设置监听器?
【发布时间】:2016-07-22 09:39:17
【问题描述】:

我正在为现有游戏引擎编写自己的插件(可以说它是与主应用程序相关的第 3 方库)。

所以,我无法访问 MainActivity 来源。

尽管如此,我必须对主要活动 lifecycle 事件(onCreate, onDestroy, onPause, onResume, onNewIntent 和一些不重要的其他事件)做出某种反应。

感谢Application.ActivityLifecycleCallbacks,我大部分都没有问题。

onNewIntent() 出现问题。我找不到此事件的listener 并想办法处理它。

有人知道如何捕捉onNewIntent 事件(当然,除了覆盖它)?

【问题讨论】:

    标签: java android android-activity listener android-lifecycle


    【解决方案1】:

    onNewIntent() 适用于已在堆栈中其他位置运行的 singleTopsingleTask 活动。如果 MainActivity 没有用 singleTop 或 singleTask 属性声明,即使你使用下面的代码,它也不会起作用:

    @Override //won't be called if no singleTop/singleTask attributes are used
    protected void onNewIntent(Intent intent) { 
        super.onNewIntent(intent);
        // ...    
    }
    

    为了确保所有设置逻辑挂钩,最好通过 getIntent() 使用 onResume()。

    @Override
    protected void onResume() { //will be called in any cases
        super.onResume();
        // getIntent() should always return the most recent        
    }
    

    【讨论】:

    • 在 onResume 中获取意图并将其与前一个进行比较听起来是个不错的主意。如果意图不同,我可以为新意图做我必须做的事情。在我的情况下,滞后是可以接受的。公认。 )
    • 这行得通吗?根据Activity.onNewIntent 的 javadoc:“请注意,getIntent() 仍然返回原始 Intent。您可以使用 setIntent(Intent) 将其更新为这个新 Intent。”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    相关资源
    最近更新 更多