OnNewIntent调用时机

说到OnNewIntent就牵涉到Activity的启动模式LaunchMode:

分别是:Standard、SingleTop、SingleTask、SingleInstance

   1. standard  
        默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中,永远不会调用onNewIntent()。  
    2. singleTop  
        如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,并调用其onNewIntent(),否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例,而不会调用onNewIntent(),此时就跟standard模式一样)。  
    3. singleTask  
        如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中(此时不会调用onNewIntent())。   
    4. singleInstance  
        在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

启动模式 首次进入 在栈顶二次进入 不在栈顶二次进入 home键后进入 back键后进入
Standard onCreate onStart onCreate onStart onCreate onStart onRestart onStart onCreate onStart
SingleTop onCreate onStart

onNewIntent

onResume

onCreate onStart onRestart onStart onCreate onStart
SingleTask onCreate onStart

onNewIntent

onResume

onNewIntent

onRestart onStart

onRestart onStart onCreate onStart
SingleInstance onCreate onStart

onNewIntent

onResume

onNewIntent

onRestart onStart

onRestart onStart onCreate onStart


为了让getIntent()方法获取到正确的Intent对象。在OnNewItent方法中需要调用setIntent(Intent intent)方法。

你可能感兴趣的:(OnNewIntent调用时机)