Activity四种启动模式常用场景

本文深入解析了Android中Activity的四种启动模式:singleInstance、singleTask、singleTop与standard的应用场景。通过具体案例如社交分享、浏览器及购物APP等,阐述每种模式的特点与优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、singleInstance常见应用场景:

①手机拨号界面(QQ、短信这种涉及数字的都会用到手机拨号界面)

②社交APP分享页面(微信、QQ、知乎)

——作为外部App调用自己客户端程序的入口的Activity都会采用singleInstance启动模式。

以下以社交分享页面为例:

 


上述图片中描绘了从相册分享图片到微信好友的整个过程共7张图,7个步骤:

①打开小米手机相册APP,选中一张图片;

②选中图片之后,选择发送到微信;

③微信此时出现界面为发送选择界面(这个活动界面的启动方式就是singleInstance);

④点击选中“文件传输助手”弹出发送确认对话框;

⑤点击“发送”,进入文件传输助手对话框,并完成照片的发送;

⑥点击back按键(笔者使用的米4,有返回键),回退到微信主活动界面;

⑦再次点击back按键,回退出微信APP,回到相册APP原始界面中。

请问:最关键的Activity是哪一个?其使用的是哪种启动模式?为什么?

解答:最为关键的是第三张图代表的Activity,微信发送选择界面,其启动模式为singleInstance。因为正常情况下,只有采用这种启动模式的活动界面才会被设置成为共享Activity,方便其他Activity和其他应用程序进行共享。

感兴趣的读者可以在思考两个问题:

1)两次按back键回退,其出栈方式分别是什么样的?

2)在微信内部,发送图片给好友,会发生什么情况,和跨应用有什么不同的地方吗?

3)打开音乐app,分享音乐到微信好友时,又会发生什么情况?

二、singleTask常用场景:

其在App内部适合作为程序入口点。从上面的介绍可以看出我们的App项目中调用较多的Activity页面使用于该启动模式,在项目中我们哪个Activity用的多?当然是首界面HomeActivity调用的较多,因此在首界面Activity的启动模式适用于改启动模式。当然其他利用较多的Activity也应该设置为该启动模式。

①浏览器首页Activity,整个任务栈只有一个实例,节约了内存;

②购物APP宝贝展示界面01,界面02确认订单,界面03付款,如果付款成功会自动跳到界面01,如果付款失败则返回界面02,这个时候重启01就是用的singleTask启动模式。

三、singleTop常用场景:

①某网易云课堂APP,每次联网之后经常会一口气收到N多个通知,点开其中一个,开始播放视频,看完了点开第二个通知,会直接在原来界面上刷新视频,而不会再次出现打开动作,这种对用户体验良好的界面播放形式就是采用了singleTop启动模式;

②某日头条新闻app,和通知相关的操作也是一样;

③便签/小说APP的设置界面,比如第一次设置好了字体大小,然后开始写作/阅读,觉得不行,字体还是太小了,第二次打开设置,去把字体改大。这个时候设置界面的启动模式就是singleTop了,因为这个操作一般来说是不频繁的,就算没有实例也可以重新创建,用其他启动方式反而是不合适的。

四、standard常用场景:

在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加,因此一般情况下我们不采用这样的启动方式,这样不但重建Activity对象造成耗时,而且也会造成内存的浪费。

但是在“某些内容可能随时更改”的app里常见,比如银行APP,依次打开“账户”“信用卡”“理财产品”会发现,每个界面的打开都需要刷新依次网络,请求最新的数据,然后在依次打开一遍,会发现,即使3秒钟前打开的Activity再次重新打开也是需要刷新网络的,可以推测,其界面的启动模式就是标准模式。

 

 

有关Activity四种启动模式的详细讲解,可以参考笔者的Activity四种启动模式及onNewIntent()方法、taskAffinity属性分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值