一直以来都被这个onNewIntent(Intent intent)的用法所困扰,直到近期才理解了其用法!

简而言之,如果要通过intent来跳转一个之前已存在/不存在的Activity,onNewIntent(Intent intent)则有可能被调用。

什么意思呢,请看以下解释:

①,如果IntentActivity处于任务栈的顶端,也就是说之前打开过的Activity,现在处于onPause、onStop 状态的话,其他应用再发送Intent的话,执行顺序为:
onNewIntent,onRestart,onStart,onResume。。。

②,系统可能会随时杀掉后台运行的 Activity ,如果这一切发生,那么系统就会调用 onCreate 方法,而不调用 onNewIntent 方法

所以,如果要保证该Activity一定要处理intent,一个好的解决方法就是在 onCreate 和 onNewIntent 方法中调用同一个处理数据的方法。

另外,一般情况下会让这个Activity的启动模式设置为singleTask,以防止实例化多个Activity(如此基本可以让onNewIntent得到调用)

技巧:在onNewIntent里面调用setIntent(Intent intent)可以覆盖原有的intent,但是要慎用

举个简单的例子:Activity A是有5个Tab的FragmentActivity,Activity B是一个普通Activity,包含一个按钮button1。A中的Tab1里面有个button2,点击button2跳转到B。如果点击B中的button1需要跳转回Activity A且让Tab选中在第5个,此时可以将A设置为singleTask,button1点击事件直接设置intent的extra然后调用startActivity(Intent intent),然后在A的onNewIntent中处理。最好在onCreate中也处理一下intent,防止A被销毁后不走onNewIntent

参考:https://my.oschina.net/xsjayz/blog/138447