android启动模式

android系统中,有很多个Activity分别都是来自于不同应用程序的,Android系统仍然可以将它们无缝地结合到一起。那这一切是怎么实现的呢?这就要讲到本文要介绍的Activity任务栈以及Activity启动模式了。

任务栈(Task):

是一种用来放置Activity实例的容器.

启动模式:

①标准模式(Standard)

在这种模式下,每次会默认创建一个新的实例。

应用场景:绝大多数Activity。

②栈顶复用模式(SingleTop)

如果要开启的activity在任务栈的顶部已经存在,就不会创建新的实例,而是调用 onNewIntent() 方法。避免栈顶的activity被重复的创建。

应用场景:在通知栏点击收到的通知.

③栈内复用模式(SingleTask)

activity只会在任务栈里面存在一个实例。如果要激活的activity,在任务栈里面已经存在,就不会创建新的activity,而是复用这个已经存在的activity,调用 onNewIntent() 方法,并且清空这个activity任务栈上面所有的activity。

应用场景:大多数App的主页。

④单例模式(SingleInstance)

单一实例模式,整个手机操作系统里面只有一个实例存在。不同的应用去打开这个activity 共享公用的同一个activity。他会运行在自己单独,独立的任务栈里面,并且任务栈里面只有他一个实例存在。

应用场景:呼叫来电界面。

启动模式的设置:

1.通过在AndroidManifest文件中的属性andorid:launchMode来设置

<activity

android:launchMode="启动模式" 

</activity>  

2.通过Intent的flag来设置.

Intent inten = new Intent (ActivityA.this,ActivityB.class);

intent,addFlags(Intent,FLAG_ACTIVITY_NEW_TASK);

startActivity(intent);

其中,

FLAG_ACTIVITY_SINGLE_TOP 栈顶复用模式(SingleTop)

FLAG_ACTIVITY_NEW_TASK 栈内复用模式(SingleTask)

FLAG_ACTIVITY_CLEAR_TOP 所有位于其上层的Activity都要移除,SingleTask模式默认具有此标记效果

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有该标记的Activity不会出现在历史Activity的列表中,即无法通过历史列表回到该Activity上

注意:

Intent设置方式的优先级 > Manifest设置方式.

Manifest设置方式无法设定 FLAG_ACTIVITY_CLEAR_TOP;Intent设置方式 无法设置单例模式(SingleInstance).

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容