活动2(生命周期,启动模式)

一.活动的生命周期

为了在活动生命周期的各个阶段之间导航转换,Activity类提供了六个回调的核心方法:onCreate(),onStart(),onResume(),onPause(),onStop()和onDestroy()。当活动进入新状态时,系统会调用每个回调。

完整的生命周期是从 onCreate()到onDestroy() , 可见的生命周期是从 onStart()到onStop() ,前台的生命周期是从

onResume()到onPause()。

一般情况下,一个活动会在onCreate()中完成各种初始化操作在onDestroy()中完成释放内存的操作

可以在onStart()方法中对资源进行加载,在onStop()方法中对资源进行释放。

在前台生命周期时,用户与活动是处于交互的状态。

 

在Android中,活动是通过任务(Task)来管理的,一个任务就是一组存放在栈中的活动的集合,这个栈叫返回栈(Back Stack)

每个活动在其生命周期中最多有4种状态。

1.运行状态,此时活动处于栈顶。

2.暂停状态,活动不处于栈顶,但是还是可见的。比如说对话框。

3.停止状态,此时活动完全不可见,系统仍会为其保留相应状态,但不完全可靠。

4.销毁状态,活动从栈中被移除。

 

如果活动被回收了怎么办?

当活动进入停止状态时,可能被系统回收。比如在A活动中启动B活动,但是A被系统回收了,此时在B活动中按Back键,仍然会显示活动A,只不过活动A是通过onCreate()重新创建的。如果活动A中存在临时数据,那么这些临时数据就没了。Activity中提供了一个回调方法是 onSaveInstanceState(Bundle outState) ,它可以保证活动被回收之前一定调用该回调方法,所以可以在这个回调方法中存储临时的数据。onSaveInstanceState(Bundle outState) ,该方法中的参数是Bundle类型,它可以用putXxx(key,value)来保存数据。如下代码即保存了临时数据:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putString("key", "value");
}

数据保存后,我们还要将其取出。

在onCreate()方法中,存在一个Bundle类型的参数。如果活动被系统回收前通过了onSaveInstanceState()方法保存数据的话,这个参数就会带有之前保存的临时数据。代码如下:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (savedInstanceState != null) {
        Xxx data = savedInstanceState.getXxx("key");
    }
}

 

二.活动的启动模式

活动的启动模式一共有4种,分别为standard、singleTop、singleTask、singleInstance。可以在AndroidManifest.xml中通过给<activity>标签指定android:launchMode属性来选择启动模式。

standard是活动默认的启动模式。对于使用standard模式的活动,每次启动都会创建该活动的一个新的实例。

singleTop模式:当启动模式为singleTop时,如果发现Back Stack的栈顶已经是该活动,则直接使用该活动,不再创建新的活动实例。如果该活动不在栈顶,则会重新创建一个新的实例。

singleTask模式:当启动模式为singleTask时,每次启动该活动时系统首先检查在Back Stack中是否存在该活动的实例,如果存在则直接使用该实例,并将其上的活动都出栈,不存在就创建一个新的活动实例。

singleInstance模式:这种模式最特殊和复杂,指定为当前模式的活动会启用一个新的Back Stack来管理这个活动。在这种模式下会有一个单独的Back Stack来管理这个活动,这就允许其他程序的调用,实现了共享活动实例的问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值