关于Activity的总结

一:概述

          本文通过Activity的生命周期,启动模式,任务栈来对Activity进行阐述

二:生命周期

        1. 正常情况的生命周期

                1.1:正常流程:

onCreate():创建,可以在这里面做初始化工作
onStart():  表示Activity已经启动,但不可交互
onResume():  可交互状态,说明该Activity已经位于前台
onPause(): 表示Activity正在停止,不能做耗时操作,因为只有onPause()执行完,新的Activity的onResume()才会执行
onStop(): 便是Activity即将停止,同样不能太耗时
onDestroy(): 表示Activity即将被销毁,做一些回收工作和资源释放

                                onRestart(): 表示Activity重新启动,当一个Activity被按Home键隐藏了的时候,再次重现会调用此方法,就是当一个Activity执行了onPause(), onStop()后又回到这个Activity的情况

                   1.2:个别情况下生命周期

                              当按Home键或者调到下一个Activity,在本Activity中执行的生命周期方法为 onPause() onStop()

          2.非正常情况的生命周期

         2.1:系统配置改变导致Activity被杀死并重新创建 
                 (1)横竖屏切换,home键,会调用onSaveInstanceState(),这个方法在onStop()之前执行,Activity重新创建后,会在onStart()后执行 onRestoreInstanceState(),
                (2)listView,textView等这些继承View的类,系统自动为我们保存当前Activity的视图结构


                (3)当在清单文件中配置了configChanges="orientation|keyboardHidden|screenSize",横竖屏切换不再重新创建Activity,而是执行 onConfigurationChanged(...) 


三:Activity的启动模式

                  3.1 AndroidMainifest启动模式:

                          standard:  默认启动模式,每次都创建新的


            singleTop:  如果该Activity设置了这个属性,当这个Activity处于栈顶的时候,不需要再创建新的,直接用,通常用于接到消息显示的界面,不用每次                                来消息都创建,在第一条弹出的时候创建Activity,第二条都不用了


                singleTasek:与singleTop类似,不过它搜索的是整个任务栈,并会把它上面的Activity全部清空,1,如果是其他程序以这个模式启动这个Activity,会创建 一个新的Activity.2.如果启动的模式为singleTase的Activity已经在后台一个任务栈中了,它所在的task会一起会被切换到前台,相当与和本 来前台的task串联起来,压上去。
                singleInstance:   与浏览器类似,为这个Activity专门开启一个task,当其他应用再开启时就不用再创建了
            注意:当启动模式设置了 singleTop或者singleInstance的activity通过startActivityForResult()来开启另外一个Activity,那么系统将直接返回 Activity.RESULT_CANCELED而不会再去等待,系统在framework层做了对这两种启动模式的限制,一般安卓开发者认为,不同的task,是不能传递数据的,只能通过Intent的传递

          当singleTop 和 singleTask中的Activity被复用的时候,onNewIntent()方法会被调用
  两种方法可以给Activity指定启动模式,清单文件中的launchMode和通过Intent设置标志位,第二种优先级高

  3.2  Intent Flag 启动模式:

系统提供了两种方法可以设置Activity的启动模式,上面是第一种,下面是第二种
      Intent.FLAG_ACTIVITY_NEW_TASK:  启动的每个Activity都将在一个新的Task中,这个flag通常用于从service中启   动Activity的场景,因为Service中并 不存在Acti vity栈,所以使用这个flag创建一个新的task
      FLAG_ACTIVITY_SINGLE_TOP   与 清单文件中的singleTop效果相同
   
          FLAG_ACTIVITY_CLEAR_TOP  与清单文件中的singleTask效果相同
     
  FLAG_ACTIVITY_NO_HISTORY  当该activity启动其他Activity后,该Activity就消失
       FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS  等同于 xml中的  excludeFromRecents="true" 具有这个标志的Activity不会出现在历史Activity中的列表中

四:Activity的任务栈

           4.1 任务栈概述:

  1.任务栈分为前台任务栈和后台任务栈,后台任务栈的Activity属于停止状态
2. 默认情况下后进先出,最开始的Activity在栈的最下面 ,同一个app的Activity可能不在同一个栈中,同一个栈也可能有不同APP的Activity

            4.2 如何清除任务栈:

                         clearTaskOnLaunch   添加该flag,每次返回该Activity时,都将该Activity之上所有的Activity清除
      finishOnTaskLaunch  与clearTaskOnLaunch属性类似,但它是作用到自己身上,当离开这个Activity所处的task,再返回的时候,这个Activity会被清
             alwaysRetainTaskState  免死金牌,将这个属性设为true,该Activity所在的task不接受任何清理命令

你可能感兴趣的:(android,框架,Activity,栈)