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

活动的生命周期

1.活动状态

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

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

Activity定义了7个回调方法

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

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

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

活动从启动到销毁的流程图如下:
Alt text

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

3.活动的启动模式

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

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

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

public class ActivityCollector {
    public static List<Activity> 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());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值