学习《第一行代码》(五)

文章目录

      • 活动的生命周期
        • 1.活动状态
        • 2.活动的生存期
        • 3.活动的启动模式
        • 4.退出程序(关闭所有活动)

活动的生命周期

1.活动状态

通过利用返回栈来实现销毁活动,每当按下Back或者调用finish()方法销毁活动时,会显示栈顶活动。

状态 解释 回收
运行状态 位于栈顶的活动
当前处于最上层,能看见的活动
系统最不愿意回收的状态,
回收了会给用户带来极差的体验
暂停状态 不是位于栈顶,但仍可见
(类似位于对话框下一层的活动,还能看得见)
当内存极低的时候,
系统才会考虑回收这种活动
停止状态 不位于栈顶,完全不可见
(即处于后台运行状态)
当其他地方需要内存时,
可以回收这种活动
销毁状态 从返回栈移除 系统最倾向于回收这种状态

2.活动的生存期

Activity定义了7个回调方法

方法名 用途
onCreate() 在此方法中完成活动的初始化操作(类似加载布局、绑定事件等)
onStrat() 活动从不可见到可见时调用
onResume() 活动准备好与用户进行交互时调用,此时活动一定位于返回栈栈顶,处于运行状态
onPause() 系统准备启动或恢复另一个活动时调用(释放资源,保存关键数据,执行速度必须快)
onStop() 活动完全不可见时调用
onDestory() 活动被销毁之前调用
onRestart() 活动从停止状态到运行状态时调用,Restart(重启)

方法除了onRestart()作为重启之外,其他两两对应把活动分为3中生存期

生存期 起始
完整生存期 onCreate() -----> onDestory(),前者完成初始化,后者释放内存
可见生存期 onStart() -----> onStop(),活动总是可见(有可能无法交互)
前台生存期 onResume() -----> onPause(),活动总是处于运行状态,可交互

活动从启动到销毁的流程图如下:
学习《第一行代码》(五)_第1张图片

保存被回收活动的临时数据用onSaveInstanceState()------类似Intent的用法

3.活动的启动模式

有四种,通过AndroidManifest.xml中给< activity >标签指定android:launchMode属性来选择

模式 解释 优劣
standard 启动另一活动时,当前活动入返回栈,位于栈顶 默认模式
singleTop 要启动另一活动时,先检测返回栈栈顶活动是否与要启动的相同,是则直接从栈中返回活动,不是则当前活动入返回栈,启动新活动 减少重复创建栈顶活动
singleTask 启动另一活动时,先检测返回栈栈中活动,存在该活动实例则将该活动之上的所有活动出栈,并直接使用该实例,不存在则当前活动入栈,启动新活动 避免浪费栈中空间,重复启动已经存在实例的活动
singleInstance 启用新的返回栈管理此活动 解决共享栈中活动实例的问题

4.退出程序(关闭所有活动)

思路:
用一个专门的集合类管理所有活动即可
用List存活动,启动活动就add,关闭活动就remove,关闭所有活动就finish

public class ActivityCollector {
    public static List activities = new ArrayList<>();
    public static void addActivity(Activity activity){
        activities.add(activity);
    }
    public static void removeActivity(Activity activity){
        activities.remove(activity);
    }
    public static void finishAll(){
        for (Activity activity :activities){
            if(!activity.isFinishing())
                activity.finish();
        }
        android.os.Process.killProcess(android.os.Process.myPid());
    }
}

为保证程序完全退出,可以在销毁所有活动后加上杀死当前进程的代码:
android.os.Process.killProcess(android.os.Process.myPid());

你可能感兴趣的:(Android学习)