启动模式简单介绍

最近面试经常碰到问这个问题,但总是记不太清楚,现按自己理解记录下,仅作理解,加深印象,若想知道原理,可以去看各位

大神的讲解。

https://blog.csdn.net/primer_programer/article/details/28849527

https://blog.csdn.net/CodeEmperor/article/details/50481726

启动模式已知两种设置方式,第一种静态设置,AndroidManifest里在Activity配置那里通过launchMode设置;第二种是动态设置,是Intent那里设置intent.setflag,动态模式的优先级大于静态的,以动态模式为主(貌似设置基本都是以动态设置为主,例如广播还有xml的属性什么的),动态设置的那个帖子找不到了,如有兴趣,自己可以搜下。

standard默认的标准模式,任务栈里的实例后进先出,也就是后面创建的先退出,可以重复创建,也可以自己创建自己。

singleTop,栈顶复用,如果在栈顶就不创建新的实例,否则创建。如QQ,微信,新闻一次推送多条信息,点进去只会看到一个,不会重复创建实例,貌似是走onNewIntent

singleTask,栈内复用,任务栈里有此实例,就不创建,其他在此上面的实例全部退出栈就行。类似于应用的主界面,不会重复创建,再看到的时候。例如对应用首页添加此模式,无论进入多少次其他页面,都会退出其他实例,由onNewIent进入。

如:a界面购物,b界面确认订单,c界面付款,如果付款成功会跳到a,如果不付款则返回b,这时候重启a就会用到singleTask,b界面会直接退出掉。

sinleInstance,介绍是创建新的任务栈里只用当前一个实例,并让多个应用共享该实例。我粗浅的理解成单独且唯一的存在于一个任务栈,类似于闹钟响铃界面和打电话界面,这个都是不会重复创建的,且其他应用都可以打开并共享这个界面一样的数据。小知识点,若AC在一个任务栈,B为singleInstace在另一个任务栈,启动顺序A->B(singleInstace)->C,退出的时候会先退出同一任务栈的,这里为C->A->B,先退出本栈的所有实例,才会退出新栈的实例。

(题外话,前两天开始用抖音,发现右滑进入发布人界面,然后再看他其他作品,重复这个操作发现退出特麻烦,这就是用了默认机制,但我也不确定要用Top还是Task,我渣感觉两种都可以用。)

以上是我从大神那看到按自己理解记录的,如有错误或侵权,请帮忙指出,谢谢。


猜你喜欢

转载自blog.csdn.net/l471979773/article/details/79910461