首页 > 编程知识 正文

android,android年终总结

时间:2023-05-04 06:15:00 阅读:157187 作者:943

个人资料

Activity作为安卓的四大组件之一,几乎被接触最多。 Activity具有启动模式的概念:标准、单次任务、单次实例。 本文总结了这四种启动模式的特点。

任务堆栈

打开APP时,第一个显示的Activity是指定的默认Activity,使用该Activity可以跳转到其他Activity,然后按后退键返回到上一个Activity。 这是因为系统将我们打开的Activity放入任务堆栈中。 打开第一个Activity时,将创建一个新的任务堆栈。 继续打开新的Activity时,会创建一个新的Activity实例,并将其放置在任务堆栈的堆栈顶部。 返回时,栈顶的Activity将被栈出,新栈顶的Activity将出现在界面中。 请参阅下图。

这是默认任务堆栈,指定不同的启动模式会导致不同的行为。

雷德尔

标准启动模式是标准启动模式,如果未指定Activity启动模式,则缺省模式为此模式。 在标准模式下,每次启动Activity时都会创建一个新实例,并调用其onCreate、onStart和onResume。 此新创建的Activity位于启动它的Activity所在任务堆栈的堆栈顶部。

例如,如果Activity A位于堆栈s中,并且它启动了Activity A (标准模式),则b将进入a所在的堆栈s。

如果在没有任务堆栈的情况下启动标准模式的Activity,例如,在Service中,如果此时新的Activity没有任务堆栈,则会发生异常。

caused by : Android.util.androidruntimeexception : callingstartactivity ) fromoutsideofanactivitycontextrequirestheflestheflletion

必须为此Activity指定FLAG_ACTIVITY_NEW_TASK。 这将创建一个新的任务堆栈。

单一标题

singleTop是栈顶复用模式。 在此模式下,如果新启动的Activity已经位于任务堆栈的顶部,则不会重新创建新实例,而是调用此Activity的onPause、onNewIntent和onResume方法如果新启动的Activity不在堆栈的顶部,则会再次创建它。

例如,堆栈内的情况为ABCD的4个Activity,a位于堆栈的底部,d位于堆栈的顶部。 如果d的启动模式为singleTop,则不会重新创建d的实例,并且在堆栈中保持为ABCD。

如果上面的d是标准启动模式,则堆栈中为ABCDD。

单任务

单任务是堆栈内复用模式。 这是最复杂的模式,因为它可能涉及多个堆栈。 当具有单任务模式的Activity启动时(如Activity A ),系统首先查找是否存在所需的任务堆栈,如果不存在,则重新创建任务堆栈,创建a的实例,然后将a放入堆栈中。 如果a有必要的任务堆栈,那时a确认堆栈内是否存在实例,如果存在,则移动到堆栈顶部并调用其onNewIntent方法,如果不存在,则制作a的实例,将a推入堆栈。 这里所说的a所需的任务堆栈是什么意思? 其实Activity可以指定自己想要的任务堆栈的名称,通过一个参数: TaskAffinity,默认所有Activity需要的任务堆栈的名称是APP包的名称。

任务堆栈S1的状况为ABC时,Activity D请求以singleTask模式启动,所需的任务堆栈为S2。 因为S2和d两个实例都不存在,所以系统首先创建任务栈S2,然后创建d的实例并栈到S2

当上面的d所需的任务栈为S1时,因为S1已经存在,所以系统直接创建d的实例并在S1上栈。

如果d所需的任务堆栈为S1,S1的情况为ADBC,则不会重新创建d,而是将d切换到堆栈顶部并调用onNewIntent方法。 B和C怎么办? 它们都离开了堆栈,相当于clearTop效果。

单一实例

单实例模式为单实例模式。 此模式是singleTask的增强版,除了singleTask的所有特性外,还增强了此模式下的Activity只能单独放置在一个任务堆栈上。

例如,Activity A处于单实例模式,当a启动时,系统会创建一个新的任务堆栈。 然后,a一个人在这个新的任务堆栈里。 由于堆栈中复用的特性,后续请求在放弃此堆栈之前不会创建新的Activity。

总结

Activity的四种启动模式就是这样。 除了singleTask有点复杂之外,很好理解。 可能有多个任务堆栈。 例如,当前有两个任务堆栈,对于前端任务堆栈为Activity1和Activity2,对于后台任务堆栈为ActivityX和ActivityY,XY的启动模式都是singleTAsk 启动y后,整个后台任务堆栈将切换到前台,此时后台列表为12XY。 按“上一步”按钮后,Activity按顺序离开堆栈。

参考

如果我的文章对你有帮助的话,请点赞鼓励我。 ^_^ )

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。