美文网首页
Android 开发艺术探索笔记 -Activity的生命周期

Android 开发艺术探索笔记 -Activity的生命周期

作者: 大叔top | 来源:发表于2017-09-17 15:29 被阅读0次

    《Android开发艺术探索》第一章笔记

    1.典型情况下的生命周期分析

    1).onCreate:表示Activity正在被创建

    2).onRestart:表示Activity正在被重新启动

    一般情况下,当前Activity从不可见重新变为可见的状态,onRestart就会被调用 

    3).onStart:表示当前的Activity正在被启动。 

        这个时间可以理解为Activity已经显示出来,但是我们看不到

    4).onResume表示当前的Activity已经可见了

        onResume和onStart的区别是

        onStart的时候在后台,onResume的时间在前台

    5).onPause表示Activity正在停止,紧接的是onStop就会被调用

        这个时候可以做一些存储数据,停止动画等动作,但是不能耗时,因为会影响新的Activity的显示,

                                        onPause必须执行完,新的Activity才会显示!!!

    6).onStop:表示Activity即将停止

    7).OnDestroy:表示Actvity即将被销毁

    针对一个特定的Activtiy,第一次启动:onCreate - onStart - onResume

    当用户回到原来的Activity,回调 :onRestart - onStart - onResume

    当用户按下Back键回退时,回调:onPause -onPause - onDestory

    onStart 和 onResume 是从Activity是否可见来回调的

    onPause 和 onPause 是从Activtiy是否位于前台来回调的


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

    3.Activity的启动模式

    讲到启动模式,肯定要讲到一个最的东西--- 任务栈

    借鉴文章 

    任务栈

    任务栈Task,是一种用来放置Activity实例的容器,他是以栈的形式进行盛放,也就是所谓的先进后出,主要有2个基本操作:压栈和出栈,其所存放的Activity是不支持重新排序的,只能根据压栈和出栈操作更改Activity的顺序。

    启动一个Application的时候,系统会为它默认创建一个对应的Task,用来放置根Activity。默认启动Activity会放在同一个Task中,新启动的Activity会被压入启动它的那个Activity的栈中,并且显示它。当用户按下回退键时,这个Activity就会被弹出栈,按下Home键回到桌面,再启动另一个应用,这时候之前那个Task就被移到后台,成为后台任务栈,而刚启动的那个Task就被调到前台,成为前台任务栈,手机页面显示的就是前台任务栈中的栈顶元素。

    1).Activity的LaunchMode

        standard:标准模式,这个也是系统默认的方式,

        每次启动会重新创建新的实例,谁启动了这个Activity,这个Activity就在谁的栈里。

        singleTop:栈顶复用模式

        该Activity的onNewIntent方法会被回调,onCreate和onStart并不会被调用。

        singleTask:栈内复用模式

        只要该Activity在一个栈中存在,都不会重新创建,onNewIntent会被回调。

        如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,然后       把这个Activity放进去;如果存在,就会创建到已经存在的这个栈中。

        singleInstance:单实例模式 这是一种加强的singleTask模式,它除了具有singleTask模式的

    所有的特性外,还加强了一点,就是具有此种模式的Activity只能单独地位于一个任务栈中

    重点

    1.1

    (1) onStart和onResume的区别是onStart可见,还没有出现在前台,无法和用户进行交互。onResume获取到焦点可以和用户交互。

    (2) 新Activity是透明主题时,旧Activity不会走onStop;

    (3)Activity切换时,旧Activity的onPause会先执行,然后才会启动新的Activity;

    (4)Activity在异常情况下被回收时,onSaveInstanceState方法会被回调,回调时机是在onStop之前,当Activity被重新创建的时候,onRestoreInstanceState方法会被回调,时序在onStart之后;

    (5)Activity的LaunchMode

    a. standard 系统默认。每次启动会重新创建新的实例,谁启动了这个Activity,这个Activity就在谁的栈里。

    b. singleTop 栈顶复用模式。该Activity的onNewIntent方法会被回调,onCreate和onStart并不会被调用。

    c. singleTask 栈内复用模式。只要该Activity在一个栈中存在,都不会重新创建,onNewIntent会被回调。如果不存在,系统会先寻找是否存在需要的栈,如果不存在该栈,就创建一个任务栈,然后把这个Activity放进去;如果存在,就会创建到已经存在的这个栈中。

    d. singleInstance。具有此种模式的Activity只能单独存在于一个任务栈。

    (5) 标识Activity任务栈名称的属性:TaskAffinity,默认为应用包名。

    (6) IntentFilter匹配规则。

    a. action匹配规则:要求intent中的action存在且必须和过滤规则中的其中一个相同 区分大小写;

    b. category匹配规则:系统会默认加上一个android.intent.category.DEAFAULT,所以intent中可以不存在category,但如果存在就必须匹配其中一个;

    c. data匹配规则:data由两部分组成,mimeType和URI,要求和action相似。如果没有指定URI,URI但默认值为content和file(schema)

    相关文章

      网友评论

          本文标题:Android 开发艺术探索笔记 -Activity的生命周期

          本文链接:https://www.haomeiwen.com/subject/oitmsxtx.html