singletask生命周期

singletask生命周期1.singleTask和singletop都是保真了Activity在栈中的唯一性  2.singleTask和singleTop实例存在时,都不会重新创建newtask  不同之处有如下几点:  如果singleTask启动的ActivityA位于栈底,在栈顶startActivity到这个ActivityA时会调动 onNewInt

大家好,又见面了,我是你们的朋友全栈君。

1.singleTask和singletop都是保真了Activity在栈中的唯一性

  2.singleTask和singleTop实例存在时,都不会重新创建 new task

  不同之处有如下几点:

  如果singleTask启动的ActivityA位于栈底,在栈顶startActivity到这个ActivityA时会调动 
onNewIntent->onStart->onResume。

  但singleTask启动的的ActivityA不存在时,会重新创建ActivityA,调用方式OnCreate->OnStart->OnResume

  2.如果singletop启动的ActivityB在栈底时,在栈顶startActivity到这个ActivityB时会重新调动 
onCreate->onStart->onResume,但不会调用OnDestroy

  并且singletop启动的的ActivityB不存在时,会重新创建ActivityB,调用方式OnCreate->OnStart->OnResume

  3.singleTask在栈底时,从栈顶startActivity到栈底ActivityA,那么该栈startActivity的发起者的中间部分Activity会被销毁。而singletop是逐级跳跃到栈顶

  singleTask

singletask生命周期

  singletop

singletask生命周期

  追加一点singleInstance,虽然也是保证唯一性,但改模式的Activity是全局性的唯一性,生命周期和应用程序相同,不能及时回收,此外的话Activity在MVC充当Controller的角色,

  这点显然对singleIntance来说不适合,因此不建议使用。

  4.singleTask不适合充当ChildActivity,但singletop适合

  5.对作业栈,默认情况下,没有任何影响,因为栈的taskid是相同的,可以获取getTaskid(),默认情况下每个activity的taskid相同

  但是,如果自定义了栈的标签(这个标签相同的singletask activity在同一个作业栈中),那么taskid就会初选差别

  android:taskAffinity=”com.sample.lanchmode.tester.main”,那么一旦另一个作业栈被销毁,下次必然重建(相信我,这不是废话)。

  为了一句不是废话,我需要来证明一下。

  当我们的初始加载WelcomeActivity界面—>HomeActivity界面时,如果将HomeActivity的启动模式设置为sigleTask+android:taskAffinity=”自定义(一般是类名)”,

  ①那么WelcomeActivity销毁后,在到达HomeActivity之后,HomeActivity回作为一个新的作业栈栈底而存在,所以由HomeActivity启动的Activity的TaskId和HomeActivity相同。

  ②这个过程,WelcomeActivity和HomeActivity的TaskId是不相同的,问题出现了,当我们按下 Home键,然后在点击桌面上的app图标你会发现,WelcomeActivity再次出现了,

  而且再次进入了HomeActivity,并且这个HomeActivity调用了OnNewIntent,却没掉用OnCreate,所以来说他一直存在这,但你需要再次过渡才能找到它。

  (对于追求捕获Home键让app退出的读者是一个喜讯,这样可以做到每次Home之后都能再次进入登录界面),在这个过程中没有直接进入HomeActivity,而是WelcomeActivity(有人说不对么,不应该是这样么,在这里不想解释)。

  注意,使用了不同作业栈的Activity,会在最近打开的app显示一个应用会出现2个界面。

  在这里,需要强调一下singleTask+android:taskAffinity不一定必须使用,请依据需求而定,网上有人推荐使用,但我却想说,不要盲目,并不是所有的应用都适合。

  1–> 
 singleTask+android:taskAffinity对于效率而言,优势并不存在,比如设置进程的,但对于带有登录状态的app需要慎用,否则造成信息泄露等问题,开发中只使用singleTask即可。

  2–> 
 singleTask+android:taskAffinity适用于单用户保密性的app(可做到Home之后下次必须登录才能查看信息),建议在这方面试试。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/153258.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 普通函数和箭头函数的区别

    普通函数和箭头函数的区别普通函数和箭头函数的区别:箭头函数的this指向规则:1.箭头函数没有prototype(原型),所以箭头函数本身没有this2.箭头函数的this指向在定义的时候继承自外层第一个普通函数的this。3.不能直接修改箭头函数的this指向4.箭头函数外层没有普通函数,严格模式和非严格模式下它的this都会指向window(全局对象)箭头函数的箭头函数的arguments箭头函数的this指向全局,使用arguments会报未声明的错误箭头函数的this指向普通函数时,它的argum

    2022年6月29日
    21
  • ViewState 剖析

    ViewState 剖析 ViewState不是什么?1.ViewState不是用来恢复回发的控件的值。这个是通过匹配form中该控件的变量名而自动完成的。这个只对Load事件加载之前创建的控件有效。2.ViewState不会自动重新创建任何通过代码动态创建的控件。3.不是用来保存用户信息的。仅仅保存本页的控件状态,而不能在页面之间传递。ViewState是什么?ViewState用来

    2022年7月21日
    14
  • java如何生成随机数「建议收藏」

    java如何生成随机数「建议收藏」java生成随机数有两种方法:1、使用Math方法,Math.random()随机生成一个double类型[0,1),如果想生成1~100的随机数:如:intnum=(int)(Math.random()*100);2、使用Random方法,Randomrandom=newRandom();(中间可以传值,传值后生成的是固定的了,详细的请关注下面星球,有写)。如:rando…

    2022年7月26日
    7
  • JavaScript阶乘算法[通俗易懂]

    JavaScript阶乘算法[通俗易懂]题目:计算所提供整数的阶乘。如果使用字母n代表一个整数,则阶乘是所有小于或等于n的整数的乘积。阶乘通常简写成n!例如:5!=1*2*3*4*5=120使用递归实现:functionfactorialize(num){varresult=1;for(vari=1;i<=num;i++){…

    2022年7月24日
    13
  • SQL之存储过程详细介绍及语法(转)

    SQL之存储过程详细介绍及语法(转)1:定义存储过程(storedprocedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在服务器端的数据库中,利用存储过程可以加速SQL语句的执行。存储过程分为系统存储过程和自定义

    2022年7月2日
    24
  • pycharm的调试功能_安卓调试模式怎么打开

    pycharm的调试功能_安卓调试模式怎么打开Debug调试,是对于学习编程人员来说是一项重要的技能。只有当你学会debug了以后,才可以正确的知道程序的走向流程是如何的,DEBUG是排除程序故障的意思。debug则是通过工具来对代码进行调试,进而一步步找出程序中出现bug的位置,也就是程序中具体错误代码的位置。Pycharm中的debug模式首先,还是用示例说话,我们先写一段简短的代码,来帮助我们完成今天要讲的内容。初学者可能没见过for循环中的下划线‘_’,在Python中是占位符的意思,因…

    2022年8月28日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号