Activity
的onNewIntent()
方法会在以下几种情况下被调用:
-
启动模式为
singleTop
时:当你的Activity
已经位于任务栈的顶部,并且用户尝试通过Intent
再次启动这个Activity
时(无论是通过startActivity()
还是startActivityForResult()
),onNewIntent()
方法会被调用,而不是创建这个Activity
的一个新实例。Intent
对象(即用于启动这个Activity
的Intent
)会作为参数传递给onNewIntent()
方法。 -
通过
FLAG_ACTIVITY_SINGLE_TOP
标志启动Activity时:即使Activity
的启动模式不是singleTop
,如果在启动Activity
的Intent
中设置了FLAG_ACTIVITY_SINGLE_TOP
标志,并且这个Activity
已经位于任务栈的顶部,那么同样会调用onNewIntent()
方法,而不是创建新的实例。 -
从通知(Notification)启动Activity时:如果你的应用从通知栏中的通知启动了一个
Activity
,并且这个Activity
已经存在于任务栈中(无论是位于顶部还是其他位置),根据Activity
的启动模式和Intent
中设置的标志,onNewIntent()
方法可能会被调用。特别是当Activity
的启动模式为singleTop
或者Intent
中设置了FLAG_ACTIVITY_SINGLE_TOP
时。 -
通过
FLAG_ACTIVITY_REORDER_TO_FRONT
标志启动Activity时:虽然这个标志不直接触发onNewIntent()
的调用,但它在将已存在的Activity
带到前台时,如果配合singleTop
模式或FLAG_ACTIVITY_SINGLE_TOP
使用,可能会间接影响onNewIntent()
的调用。不过,通常FLAG_ACTIVITY_REORDER_TO_FRONT
用于将现有的Activity带到前台而不调用onCreate()
、onStart()
或onResume()
(如果它已经在前台),并且不一定会导致onNewIntent()
的调用。
需要注意的是,onNewIntent()
方法只在Activity
已经存在(即已经通过onCreate()
方法初始化)且处于可接收新Intent
的状态(如位于任务栈的顶部或符合singleTop
的条件)时才会被调用。如果Activity
不存在于任务栈中,或者Intent
的匹配导致创建了一个新的Activity
实例(例如,因为启动模式不是singleTop
且没有设置FLAG_ACTIVITY_SINGLE_TOP
),则onNewIntent()
不会被调用,而是会正常通过onCreate()
、onStart()
和onResume()
等生命周期方法初始化Activity
。
PS: 核心一点 就是已经Activity已经存在了,然后还有被复用的时候 就会走。NewIntent