首页 > 解决方案 > onNewIntent() 与 onReceive()

问题描述

是不是onNewIntent()在Activity中就相当于onReceive() 在Broadcast Receiver中并且可以替代呢?如果不是,两者有什么区别?活动暂停时是否onNewIntent()仍会启动?

标签: androidandroid-studio

解决方案


Q1.Activity中的onNewIntent()等价于Broadcast Receiver中的onReceive()可以替代吗?

答:没有。

Q2。如果不是,两者有什么区别?

Ans: Activity 和 Broadcast 是两个不同的组件,这两个方法是它们的回调,这意味着当您的广播被触发时,只有您可以在onReceive()中获得回调,但是当您的活动使用 singleTop 启动模式并且您的活动已经在顶级任务中时(堆栈),如果您调用相同的活动,那么只有您会在 onNewIntent() 上获得回调。

Q3。Activity 暂停时 onNewIntent() 是否仍会启动?

答。这适用于在其包中将启动模式设置为“singleTop”的活动,或者如果客户端在调用 startActivity(Intent) 时使用了 Intent#FLAG_ACTIVITY_SINGLE_TOP 标志。在任何一种情况下,当活动在活动堆栈的顶部而不是正在启动的活动的新实例时重新启动时,将在现有实例上调用 onNewIntent(),并使用用于重新启动的 Intent它。

活动在恢复状态下永远不会收到新的意图。您可以指望在此方法之后调用 onResume(),但不一定在此回调完成后立即调用。如果活动被恢复,它将被暂停并传递新的意图,然后是 onResume()。如果活动未处于恢复状态,则可以立即传递新的意图,稍后当活动再次变为活动时调用 onResume()。

请注意,getIntent() 仍然返回原始 Intent。您可以使用 setIntent(Intent) 将其更新为这个新的 Intent。

注意:如果您不了解启动模式和任务,请访问此链接: https ://developer.android.com/guide/components/activities/tasks-and-back-stack 。


推荐阅读