对于Android的生命周期和启动模式的一些体会

                                                            体会Android的启动模式

  这一篇写的是自己,对Android生命周期和启动模式的一些体会。不是对Android的生命周期和启动模式的认识,所以直接跳过了认识部分。。。

Android的生命周期

提下个别有用的知识点:

前台和后台的区别:我认为是否具有用户交互的能力

在Activity的周期中:

着重注意:onStart()和onStop(),onResume()和onPause()这两对。

从宏观看:

onStart()和onStop()作用为Activity是否可见。

onResume()和onPause()作用为Activity在前台还是后台

Android的启动模式

1.standard(默认)

       谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的栈中,这种模式下Activity的实例随便整。如下图:

2.singleTop

   中文式瞎翻一下:栈顶为单例。

       这个就是说,如果你启动的Activity已经存在,且为启动Activity所在栈的栈顶,那么你启动的Activity将不在创建实例,直接复用栈顶的Activity的实例。此时Activity不会调用自己的onCreate()与onStart()方法,因为我们复用了该Activity已经在栈顶的实例。但是它回去调用onNewIntent(Intent)为你传递启动Activity的请求信息。如果你启动的Activity已经存在,但不为启动Activity所在栈的栈顶,那么它将重写创建。

图解:

    如果栈为图一情况:此时需要启动c,则不会重写创建,而是复用栈顶c.

   如果栈为图二情况:如果需要创建一个c,此时栈中没有肯定会创建一个c.而需要创建一个a那???答案为图三,也会重写创建一个a.

3.singleTask

   中文式瞎翻译下:Activity单任务。

      这个所说的是,如果你启动的Activity已经存在,且在启动Activity所在栈中,那么系统会帮你把该Activity实例上面的所用其它activity实例退出栈,使其自己为栈顶,这样来达到创建自己的效果。

  图解:

如果我们此时栈为图一,我们需要启动a,结果为图二。

当然还要再提下里面的一个重要知识点:taskAffinity(任务栈的名字)与singleTask连用开启新的任务栈

有taskAffinity 要注意

1.其值为字符串且中间必须包含分隔符.(前面为字母模式小数点)

2.默认值为应用包名。

已知 三个Activity 分别为a,b,c。a,c为standard模式,b为singleTask+taskAffinity="com.xi"模式。

      a启动b,b启动c

回退是c-->b-->a 表现和正常情况一样。。。但栈情况不同,如下图。

4.singleInstance(重点)

   中文式瞎翻译:单例

       这个模式比较复杂,它是一种加强的singleTask的模式,除了具有singleTask模式的所有特性外,还有一点点小本事-----具有该模式的Activity只能单独的位于一个任务栈中(即 整个App中只能存在唯一的该Activity实例)

下面根据一个例子来认识下singleInstance:

已知 三个Activity 分别为a,b,c。a,c为standard模式,b为singleInstance模式。

                                                                                    说明:a-->b-->c表示a启动b,b启动c。

解答按下面顺序启动Activity后,按back键后退,Activity的出栈顺序???

一、a-->b-->c     则出栈顺序为c-->a-->b

解释下:

启动后栈的情况:

先退出当前栈所有activity,在退出与其有关联的栈。

二、a-->b-->c  ,按home键,然后再其后台打开该应用。此时返回顺序为a-->b-->手机主页。

解释:

首先要明白:手机主页也是一个Activity,而且有其自己独有的栈。其次要知道,几个不同栈退栈时也有顺序,按其运行顺序。

看下图

  

对于其顺序:(图标识了栈的编号)

   我们从a启动b,然后启动c,此时顺序编号为12。按下home键,为312。再打开,为132.于是退栈顺序为132,但是退到3时为手机页,相当于退出了程序,就没有2啥事了。

三、a-->c-->b 按下home键,点击该App图标打开应用。此时返回顺序为 c-->a-->手机主页。

如果根据第二种情况分析,返回顺序应该为b-->手机主页。但为啥不一样了???

解释:这里提下一个小知识点。当后台存在该App应用时,再次通过点击该App图标打开应用时,系统默认为重新打开应用,但历史栈内容不清除。

 由于系统默认重新打开应用,此时回去加载App首页(即App启动第一个Activity)所在的栈1,又因为历史栈内容不清除。所以······

猜你喜欢

转载自blog.csdn.net/silently_frog/article/details/81663192