第一章:Activity的生命周期和启动模式

ActivityAndroid中四大组件之首,所以需要重视,尤其是启动方式,在AndroidManifest.xml中的注册信息

  (一)Activity的生命周期

  1.1.1 正常情况下的生命周期

    说明

    (1)针对一个特定的Activity,第一次启动顺序:onCreate->onStart->onResume.

    (2)当用户打开新的Activity或者切换到桌面的时候,回调如下:onPause->onStop

    (3)返回原Activity时,回调如下:onRestart->onStart->onResume.

    (4)当用户按back返回是,回调如下:onPause->onStop->onDestroy

  *onStart和onStop是从Activity是否课件这个角度来回调的,二onResume和onPause是从Activity是否位于前台这个角度来回调

  *Activity的启动涉及Instrumention,ActivityThread和ActivityManagerService(简称AMS).

    启动Activity的请求会由Instrumention来处理,然后它通过Binder向AMS发请求,AMS内部维护这一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用

  (Android官方文档对onPause解释中,提醒不能再onPause中进行重量级的操作,因为必须onPause执行完之后新Activity才能Resume)

  1.1.2 异常情况下的生命周期分析

    (1)配置文件改变导致异常

      说明:当系统配置发声改变后,Activity会被销毁,其onPause,onStop,onDestroy均会被调用,同时由于Activity是在异常情况下终止的,系统会调用onSaveInsatnceState来保存当前Activity的状态

      (正常情况下是不会调用onSaveInsatnceState)

      出现异常,系统的工作流程:Activity会调用onSaveInsatnceState去保存数据,然后Activity会委托Window去保存数据,接着Window再委托它上面的顶级容器去保存数据.

      顶层容器是一个ViewGroup,一般来说它很可能是DecorView.最后顶级容器再去通知它的子元素来保存数据(委托思想,上层委托下层,容器委托子元素去处理事件)

    (2)资源内存不足导致优先级低的Activity被杀死

      解决方法:将后台工作放入Service中保证进程有一定的优先级,不会让系统杀死

  *当配置文件改变时,Activity会重新创建,通过给activity指定configChanges属性.(哎AndroidMainfest.xml中加入声明)

  *常用的三个选项:

    1. locale:设备的本地位置发生改变,一般指切换了系统语言
    2. orientation:屏幕方向发生了改变,这个是最常用的
    3. keyboardHidden:键盘的可访问性发生了改变,比如用户调出了键盘

  1.2 Activity的启动模式

    1.2.1 Activity的LaunchMode

    1. standard:标准模式,每次启动一个Activity都会重新建一个新的实例,不管这个实例是否已经存在
    2. singleTop:栈顶复用模式,如果新Activity已经位于任务站的栈顶,那么次Activity不会被重新创建,同时它的onNewIntent方法会被调用,通过此方法的参数我们可以去取当前请求的信息.
    3. singleTask:栈内复用模式,这是一种单实例模式,在这种模式下,只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例,和singleTop一样,系统也会调用其onNewIntent
    4. singleIntance:单实例模式,一种加强的singleTask模式,除了具有singleTask模式的所有特性,还具有此种模式的Activity只能单独地位于任务栈中,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个任务栈被系统销毁

    

    *Activity所需的任务栈,与TaskAffinity(任务相关性),这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有的Activity所需的任务栈的名字为应用的包名.

    *可以为每个Activity都单独指定TaskAffinity属性,不同的名字代表不同的任务栈android:taskAffinity="属性值为字符串"

    *任务栈分为前台任务栈和后台任务栈

    *给Activity指定启动模式有如下两种方法:

    1. 在AndroidManifest.xml中通过android:launchMode="singleTask"
    2. 通过Intent中设定标志位为Activity指定启动模式

        栗子:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    *第一种的优先级比第二种的要高

    1.2.2 Activity的Flags

      列出常用的:

      1. FLAG_ACTIVITY_NEW_TASK:为Activity指定"singleTask"启动模式
      2. FLAG_ACTIVITY_SINGLE_TOP:指定"singleTop"启动模式
      3. FLAG_ACTIVITY_CLEAR_TOP:在同一个任务栈中所有位于它上面的Activity都要出栈
      4. FLAG_ACTIVIT_EXCLUDE_FROM_RECENTS:具有这个标记的Activity不会出现在历史Activity的列表中

    

    1.3 IntentFilter的匹配规则

       Activity的启动分为两种:显式调用和隐式调用.尽量使用隐式调用

       显式调用:

        需要明确地指定被启动对象的组件信息,包括包名和类名

       隐式调用: 需Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,IntentFilter中的过滤信息有action,category,data

        不需要明确指定组件信息

      

       *一个Intent同时匹配action类型,category类型,data类型才算完全匹配,才能启动目标Activity,一个Activity中可以有多个intent-filter,一个Intent只要能匹配任何一组intent-filter即可成功启动对应的activity

       匹配规则

      1.  action的匹配规则

          action的匹配要求Intent中的action存在且必须和过滤规则中的其中一个action相同.

        2.   category的匹配规则

          Intent中可以没有category,如果有的话,每一个都需要能够和匹配过滤规则中的任何一个category相同.

         *startActivity或者startActivityForResult的时候会默认为Intent加上"android.intent.category.DEFAULT"这个category

        3.   data的匹配规则

          与action类似,如果过滤规则中定义了data,那么Intent中必须也要定义可匹配的data

          data的语法:(由两部分组成,mimeType指的是媒体类型,和URI,结构:<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

            <data android:scheme="string"

                android:host="string"

                port/path/pathPattern/pathPrefix/mimeType="string">

          *栗子:在<intent-filter>中设定<data android:mimeType="image/*">匹配标签,那么Intent中的mimeType属性必须思维"image/*"才能匹配.

             建议使用intent.setDatAndType,如果单独使用setData和setType,会互相清除对方的值

      匹配栗子:      

      

1 Intent intent = new Intent("");
2 intent.addCategory("");
3 intent.setDataAndType(Uri.parse(data), type);
4 startActivity(intent); 

    

时间: 2024-10-10 22:54:24

第一章:Activity的生命周期和启动模式的相关文章

Android开发艺术探索——第一章:Activity的生命周期和启动模式

Android开发艺术探索--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activity搬上来了,也确实,和Activity打交道的次数基本上是最多的,而且他的内容和知识点也是很多的,非常值得我们优先把他掌握,Activity中文翻译过来就是"活动"的意思,但是主席觉得这样翻译有些生硬,直接翻译成"界面"可能更好,的确,Activity主要也是用于UI效

Android开发艺术探索(一)——Activity的生命周期和启动模式

Activity的生命周期和启动模式 生命周期有? 1.典型情况下的生命周期—>指有用户参与的情况下,Activity所经过的生命周期改变 2.异常情况下的生命周期—>指Activity被系统回收或者由于当前设备的configuration发生改变而导致Activity被销毁重建 1.1 典型生命周期分析 旧活动的OnPause先调用,新Activity才启动 异常分析: 1.资源相关的系统配置发生改变,导致Activity被杀死并重新创建 系统只在Activity导致终止的时候才会调用OnS

第1章 Activtiy的生命周期和启动模式

1.1 Activtiy的生命周期全解 Activity的生命周期分为两部分内容,一部分是典型情形下的生命周期,另一个就是异常情形下的生命周期.所谓的典型情形下的生命周期是指在用户参与的情况下,Activity所经历的生命周期的改变:而异常情况下的生命周期是指Activity被系统回收或者由于当前设备的Configuration发生变化而导致的Activity被销毁重建. 1.1.1 典型情况下的生命周期分析 在正常情况下,Activity会经历如下生命周期. (1)onCreate:表示的是A

Activity的生命周期以及启动模式

一.activity的生命周期: 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态. 2.当前Activity被其他Activity覆盖其上或被锁屏:系统会调用onPause方法,暂停当前Activity的执行. 3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态. 4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后

activity的生命周期及启动模式

activity的生命周期:onCreate(),onStart(),onResume(),onPause(),onRestart(),onStop(),onDestory() 对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行:onStart() 当打开一个activity时,调用onCreate()->onStart()->onResume(),如果已经创建,不用调用onCreate(),当打开另一个activity后,一样的步骤,当它遮住原先的activity时,原先的a

十分钟掌握Activity的生命周期与启动模式

1. Activity的生命周期 正常情况下的Activity生命周期如下图所示(来自Android Developer): 当资源相关的系统配置变更时(比如设备屏幕方向改变,键盘可见性变化),会导致Activity的销毁与重建.某些系统配置变更时,系统会根据最新配置重新为应用加载适合于当前配置的资源,这些系统配置就是资源相关的系统配置.此时在销毁Activity前会调用onSaveInstance()方法已保存当前的状态信息,这个方法会在onStop()前被调用,但与onPause()的时序关

第一章——Activity的生命周期

问题总结: 1.Activity完整的生命周期 2.当打开第二个Activity并关闭时候的生命周期. ①.解释为什么onPause()方法不要有耗时操作 3.Activity异常终止的几种情况 4.Activity异常的生命周期 5.Activity异常的解决办法 ①.防止屏幕旋转,并重启Activity ②.当键盘改变的时候,改变布局.

安卓开发 activity的生命周期以及启动模式

Activity生命周期 安卓活动由一个返回栈管理 安卓活动有四个状态 1.运行状态 当一个活动位于栈顶的时候,这个活动就处于运行状态,也就是和用户进行交互的那个界面. 2.暂停状态 当活动不处于栈顶,但依然可见.意思就是这个活动没有被完全覆盖,上面有一层对话框之类的. 3.停止状态 活动不处于栈顶,完全不可见.这个好理解吧,就是用户看不到了. 4.销毁状态 活动从栈中移除了,也就是被用户关闭了. Activity共有七个回调方法,覆盖了活动整个生命周期 1.onCreate() 活动创建时调用

Activity的生命周期和启动模式详解

Activity生命周期经典图解: 按键对生命周期的影响: BACK键: 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()三个方法. 再次启动App时,会执行onCreate()->onStart()->onResume() HOME键: 当我们打开应用程序时,比如浏览器,我正在浏览NBA新闻,看到一半时,我突然想听歌,这时候我们会选择按HOME键,然后去打开音乐应用程序,而当我们按HOME的时候,A