标准模式(Standard)
(资料图)
标准模式(Standard),这也是系统默认模式,每次启动一个activity都会重新创建一个新的实例,不关这个实例是否存在; ApplicationContext去启动standard模式的Activity的时候就会报错:
android.util.androidruntiomException: Calling startActivity from outside of an Activity context requires the FLAG_ACTIVITY_TASK flag . Is this really what are want?
因为我们的standard模式的Activity默认会进入启动它的Activity所属的任务栈中,但是由于非Activity类型的Context(如ApplicationContext)并没有所谓的任务栈,所以这就有问题了,解决这个问题,就是待启动Activity指定FLAG_ACTIVITY_TASK标记位,这样启动的时候就会为他创建一个新的任务栈,这个时候待启动Activity实际上是以singleTask模式启动的。
栈顶复用模式(SingleTop)
栈顶复用模式(SingleTop),栈顶复用模式,在这个模式下,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时他的onNewIntent方法会被调用,通过此方法的参数我们可以取出当前请求的信息
栈内复用模式(SingleTask)
栈内复用模式(SingleTask)栈内复用模式,这是一种单实例模式,在这种模式下,只要Activity在一个栈内存在,那么多次启动此Activity都不会创建实例,和singTop一样,系统也会回调其onNewIntent方法;
TaskAffinity,可以翻译成任务相关性,这个参数标示了一个Activity所需要的任务栈的名字默认情况下,所有的Activity所需要的任务栈的名字为应用的包名,可以为每个Activity都单独指定TaskAffinity,这个属性值必须必须不能和包名相同,否则就相当于没有指定,TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配合使用,在其他状况下没有意义,另外,任务栈分为前台任务栈和后台任务栈,后台任务栈中的Activity位于暂停状态,用户可以通过切换将后台任务栈再次调为前台
当TaskAffinity和singleTask启动模式配对使用的时候,他是具有该模式Activity目前任务栈的名字,待启动的Activity会运行在名字和TaskAffinity相同的任务栈中
当TaskAffinity和allowTaskReparentiing结合的时候,当一个应用A启动了应用B的某一个Activity后,如果这个Activity会直接从应用A的任务栈转移到应用B的任务栈中,这还是很抽象的,再具体点,比如现在有2个应用A和B,A启动了B的一个Activity C ,然后按Home键回到桌面,然后再单击B的桌面图标,这个时候并不是启动; B的主Activity,而是重新显示了已经被应用A启动的Activity C,或者说,C从A的任务栈转移到了B的任务栈中,可以这么理解,由于A启动了C,这个时候C只能运行在A的任务栈中,但是C属于B应用,正常情况下,他的TaskAffinity值肯定不可能和A的任务栈相同(因为包名不同),所以,当B启动后,B会创建自己的任务栈,这个时候系统发现C原本所想要的任务栈已经被创建出来了,所以就把C从A的任务栈中转移过来
单实例模式(SingleInstance)
单例模式(SingleInstance),这是一种加强的singleTask的模式,他除了具有singleTask的所有属性之外,还加强了一点,那就是具有此模式下的Activity只能单独的处于一个任务栈中,换句话说,比如Activity A是singleInstance模式,当A启动的时候,系统会为创建创建一个新的任务栈,然后A独立在这个任务栈中,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁了
两种设置启动模式的方法
第一种
第二种
Intent intent = new Intent(); intent.setClass(this,SecondActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(intent);
两种都可以设置activity的启动模式 ,第二种优先级更高,同时存在时以第二种为准,两种方式限定范围有所不同,第一种方式无法直接为Activity设置FLAG_ACTIVITY_CLEAR_TOP标识,而第二种方式无法指定singleInstance模式
12月16日,国家能源局发布1-11月份全国电力工业统计数据。截至11月底,全国累计发电装机容量约251亿千瓦,同比增长81%。其中,风电装机容更多
2022-12-20 08:59:521-11月,全社会用电量同比增长,城乡居民生活用电量保持两位数增长;发电装机延续绿色发展趋势,发电量增速有所放缓;除太阳能发电外,其更多
2022-12-20 09:04:12记者从国家发展改革委了解到,目前,全国能源供需总体平稳有序,人民群众温暖过冬能够得到有效保障。 从煤炭生产看,1—11月份,全国原更多
2022-12-20 09:01:19近日,受寒潮天气影响,我国大部分地区出现剧烈降温,能源保供进入迎峰度冬关键期。能源大省山西深挖增产潜力,煤炭产量、电力外送规模、更多
2022-12-20 08:59:1512月18日下午,煤炭钢铁行业交流机制工作会在广东省珠海市召开,中国煤炭工业协会、中国钢铁工业协会、中国煤炭运销协会,山西焦煤、山东更多
2022-12-19 14:02:1412月17日,中国焦煤品牌集群高层领导座谈会在广东省珠海市召开。龙煤集团党委书记、董事长王佳喜,淮北矿业集团党委书记、董事长方良才,更多
2022-12-19 14:08:28盘江股份董事长朱家道12月15日在业绩交流会上表示,公司尚未释放煤炭产能约500万吨,将通过改善生产条件等方式方法,尽快释放产能,提升原更多
2022-12-19 10:08:24内蒙古自治区统计局消息,1-11月份,全区规模以上工业企业原煤产量107亿吨,同比增长121%,保持了今年以来两位数增长的态势。从当月情况看更多
2022-12-19 09:54:45今年以来,福建八方港口积极调整经营思路,多举措拓展内贸煤市场。截至11月30日,港口完成内贸卸船量3047万吨,同比上涨1112%,比去年全年更多
2022-12-19 10:12:07为了最大限度地减少疫情对经济社会发展影响,近日,吕梁市出台支持工业企业加快复工复产达产达效15条措施,促进全市经济快速回升向好。 更多
2022-12-19 10:04:25