taskAffinity属性的奇特效果

加载某个Activity的intent,Flag被设置成FLAG_ACTIVITY_NEW_TASK时,它会首先检查是否存在与自己taskAffinity相同的Task,如果存在,那么它会直接宿主到该Task中,如果不存在则重新创建Task。


首先写一个应用A1,它有两个Activity(Activity1和Activity2),AndroidManifest.xml如下: 




    

    
        Activity1"
            android:label="@string/app_name"
            android:taskAffinity="com.task" >
        
        Activity2" >
            
                

                
            
        
    

 然后,我们再写一个应用A2,它包含一个Activity(MainActivity ),AndroidManifest.xml如下:



    

    
        
            
                

                
            
        
    

运行一下看看下过吧 ....就知道里面是怎么跑的了.....

总结:
 当一个应用程序加载一个singleTask模式的Activity时,首先该Activity会检查是否存在与它的taskAffinity相同的Task。 

    1、如果存在,那么检查是否实例化,如果已经实例化,那么销毁在该Activity以上的Activity并调用onNewIntent。如果没有实例化,那么该Activity实例化并入栈。 

    2、如果不存在,那么就重新创建Task,并入栈。 

 用一个流程来表示: 

   然后我们来检测singleTask模式融入taskAffinity时的情况,我们也是用上文中测试singleTask的例子,在此不列出,读者翻阅前文查阅。唯一不同的是,我们将A2和Activity2设置成相同的taskAffinity。 

    我们发现测试结果也有一定的出入,就是,当从singleTask中启动Activity时,并没用重新创建一个Task,而是进入了和它具有相同affinity的MyActivity所在的Task。 

    于是,我们也能得到以下结论: 

    1、当一个应用程序加载一个singleTask模式的Activity时,如果该Activity没有被实例化,那么就重新创建一个Task,并入栈,如果已经被实例化,那么就调用该Activity的onNewIntent; 

    2、singleTask的Activity所在的Task不允许存在其他Activity,任何从该Activity加载的其它 Actiivty(假设为Activity2)都会被放入其它的Task中,如果存在与Activity2相同affinity的Task,则在该 Task内创建Activity2。如果不存在,则重新生成新的Task并入栈。

你可能感兴趣的:(android,XML属性)