android中taskAffinity属性有什么作用


这篇文章主要讲解了“android中taskAffinity属性有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“android中taskAffinity属性有什么作用”吧!首先,我们启动application1,加载Activity1,然后按Home键,使该task(假设为task1)进入后台。然后启动application2,默认加载Activity2。我们看到了什么现象?没错,本来应该是显示Activity2,但是我们却看到了Activity1。实际上Activity2也被加载了,只是Activity1重新宿主,所以看到了Activity1。第二种情况。如果加载某个Activity的intent,Flag被设置成FLAG_ACTIVITY_NEW_TASK时,它会首先检查是否存在与自 免费云主机域名己taskAffinity相同的Task,如果存在,那么它会直接宿主到该Task中,如果不存在则重新创建Task。我们来做一个测试。我们首先写一个应用,它有两个Activity(Activity1和Activity2),AndroidManifest.xml如下:

android:taskAffinity=”com.winuxxan.task”

android:label=”@string/app_name”>

android:taskAffinity=”com.winuxxan.task”android:label=”@string/app_name”>Activity2的代码如下:public class Activity2 extends Activity {private static final String TAG = “Activity2”;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main2);}@Overridepublic boolean onTouchEvent(MotionEvent event) {Intent intent = new Intent(this, Activity1.class);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);return super.onTouchEvent(event);}}然后,我们再写一个应用MyActivity,它包含一个Activity(MyActivity),AndroidManifest.xml如下:

android:taskAffinity=”com.winuxxan.task”

android:label=”@string/app_name”>

android:taskAffinity=”com.winuxxan.task”android:label=”@string/app_name”>我们首先启动MyActivity,然后按Home键,返回到桌面,然后打开Activity2,点击Activity2,进入Activity1。然后按返回键。我们发现,我们进入Activity的顺序为Activity2->Activity1,而返回时顺序为 Activity1->MyActivity。这就说明了一个问题,Activity1在启动时,重新宿主到了MyActivity所在的Task 中去了。以上是验证了文档中提出的两种TaskAffinity的用法。下面就是见证奇迹的时刻,同志们,不要眨眼!我们现在将上一文中的launchMode和本文讲的taskAffinity结合起来。首先是singleTask加载模式与taskAffinity的结合。我们还是用上一文中的singleTask的代码,这里就不在列出来了,请读者自己查阅上一文。***不同的就是,我们为MyActivity和Activity1设置成相同的taskAffinity,重新执行上文的测试。我们发现测试结果令我们惊讶:从同一应用程序启动singleTask和不同应用程序启动的结果完全与上文讲的相反!我们经过思考,就可以把从同一应用程序执行和从不同应用程序执行另种方式同一起来,得到一个结论:当一个应用程序加载一个singleTask模式的Activity时,首先该Activity会检查是否存在与它的taskAffinity相同的Task。1、如果存在,那么检查是否实例化,如果已经实例化,那么销毁在该Activity以上的Activity并调用onNewIntent。如果没有实例化,那么该Activity实例化并入栈。2、如果不存在,那么就重新创建Task,并入栈。用一个流程来表示:然后我们来检测singleInstance模式融入taskAffinity时的情况,我们也是用上文中测试singleInstance的例子,在此 不列出,读者翻阅前文查阅。***不同的是,我们将MyActivity和Activity2设置成相同的taskAffinity。我们发现测试结果也有一定的出入,就是,当从singleInstance中启动Activity时,并没用重新创建一个Task,而是进入了和它具有相同affinity的MyActivity所在的Task。于是,我们也能得到以下结论:1、当一个应用程序加载一个singleInstance模式的Activity时,如果该Activity没有被实例化,那么就重新创建一个Task,并入栈,如果已经被实例化,那么就调用该Activity的onNewIntent;2、singleInstance的Activity所在的Task不允许存在其他Activity,任何从该Activity加载的其它 Actiivty(假设为Activity2)都会被放入其它的Task中,如果存在与Activity2相同affinity的Task,则在该 Task内创建Activity2。如果不存在,则重新生成新的Task并入栈.感谢各位的阅读,以上就是“android中taskAffinity属性有什么作用”的内容了,经过本文的学习后,相信大家对android中taskAffinity属性有什么作用这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是百云主机,小编将为大家推送更多相关知识点的文章,欢迎关注!

相关推荐: C语言中的关键字怎么用

本篇内容介绍了“C语言中的关键字怎么用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1999年12月16日,ISO推出了C99标准,该标准新增了5个C语言关键字…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/19 10:19
下一篇 04/19 10:19

相关推荐