登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 200|回复: 4

Android编程中Activity的四种启动模式,android中的网络编程

[复制链接]

324

主题

713

帖子

726

安币

手工艺人

发表于 2018-1-11 15:43:29 | 显示全部楼层 |阅读模式

        本文实例讲述了android编程中activity的四种启动模式。分享给大家供大家参考,具体如下:

        activity启动方式有四种,分别是:

        standard
singletop
singletask
singleinstance

        可以根据实际的需求为activity设置对应的启动模式,从而可以避免创建大量重复的activity等问题。

        设置activity的启动模式,只需要在androidmanifest.xml里对应的<activity>标签设置android:launchmode属性,例如:

[Java] 查看源文件 复制代码
<activity 
  android:name=".a1" 
  android:launchmode="standard" /> 

        下面是这四种模式的作用:

        standard

        默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。因此,在这种模式下,可以有多个相同的实例,也允许多个相同activity叠加。

        例如:

        若我有一个activity名为a1, 上面有一个按钮可跳转到a1。那么如果我点击按钮,便会新启一个activity a1叠在刚才的a1之上,再点击,又会再新启一个在它之上……

        点back键会依照栈顺序依次退出。

        singletop

        可以有多个实例,但是不允许多个相同activity叠加。即,如果activity在栈顶的时候,启动相同的activity,不会创建新的实例,而会调用其onnewintent方法。

        例如:

        若我有两个activity名为b1,b2,两个activity内容功能完全相同,都有两个按钮可以跳到b1或者b2,唯一不同的是b1为standard,b2为singletop。
若我意图打开的顺序为b1->b2->b2,则实际打开的顺序为b1->b2(后一次意图打开b2,实际只调用了前一个的onnewintent方法)
若我意图打开的顺序为b1->b2->b1->b2,则实际打开的顺序与意图的一致,为b1->b2->b1->b2。

        singletask

        只有一个实例。在同一个应用程序中启动他的时候,若activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它activity destory掉并调用它的onnewintent方法。

        如果是在别的应用程序中启动它,则会新建一个task,并在该task中启动这个activity,singletask允许别的activity与其在一个task中共存,也就是说,如果我在这个singletask的实例中再打开新的activity,这个新的activity还是会在singletask的实例的task中。

        例如:

        若我的应用程序中有三个activity,c1,c2,c3,三个activity可互相启动,其中c2为singletask模式,那么,无论我在这个程序中如何点击启动,如:c1->c2->c3->c2->c3->c1-c2,c1,c3可能存在多个实例,但是c2只会存在一个,并且这三个activity都在同一个task里面。

        但是c1->c2->c3->c2->c3->c1-c2,这样的操作过程实际应该是如下这样的,因为singletask会把task中在其之上的其它activity destory掉。

        操作:c1->c2 c1->c2->c3 c1->c2->c3->c2 c1->c2->c3->c2->c3->c1 c1->c2->c3->c2->c3->c1-c2
实际:c1->c2 c1->c2->c3 c1->c2 c1->c2->c3->c1 c1->c2

        若是别的应用程序打开c2,则会新启一个task。

        如别的应用other中有一个activity,taskid为200,从它打开c2,则c2的taskidi不会为200,例如c2的taskid为201,那么再从c2打开c1、c3,则c2、c3的taskid仍为201。

        注意:如果此时你点击home,然后再打开other,发现这时显示的肯定会是other应用中的内容,而不会是我们应用中的c1 c2 c3中的其中一个。

        singleinstance

        只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的activity存在。

        例如:

        程序有三个activityd1,d2,d3,三个activity可互相启动,其中d2为singleinstance模式。那么程序从d1开始运行,假设d1的taskid为200,那么从d1启动d2时,d2会新启动一个task,即d2与d1不在一个task中运行。假设d2的taskid为201,再从d2启动d3时,d3的taskid为200,也就是说它被压到了d1启动的任务栈中。

        若是在别的应用程序打开d2,假设other的taskid为200,打开d2,d2会新建一个task运行,假设它的taskid为201,那么如果这时再从d2启动d1或者d3,则又会再创建一个task,因此,若操作步骤为other->d2->d1,这过程就涉及到了3个task了。

        更多关于android相关内容感兴趣的读者可查看本站专题:《android编程之activity操作技巧总结》、《android通信方式总结》、《android调试技巧与常见问题解决方法汇总》、《android开发入门与进阶教程》、《android基本组件用法总结》、《android布局layout技巧总结》及《android控件用法总结》


85

主题

9515

帖子

2208

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-13 01:59:57 | 显示全部楼层
帮帮顶顶!!

7

主题

9677

帖子

2347

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-14 04:22:24 | 显示全部楼层
感谢大神~

0

主题

9220

帖子

1162

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-14 21:15:05 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

465

主题

9647

帖子

827

安币

代码手工艺人

Rank: 4

发表于 2018-1-15 08:48:01 | 显示全部楼层
支持楼主,支持安卓巴士!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区
联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表