书小宅之android开发——活动的生命周期

本文深入解析Android中Activity的生命周期,包括运行、暂停、停止及销毁等状态,探讨onCreate、onStart、onResume等关键方法的作用,以及如何利用onSaveInstanceState和Intent进行数据保存与传递。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity的生命周期

Activity是一个负责与用户交互的组件,在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity 之间通过意图【Intent】进行通信。

活动状态

运行状态:位于返回栈栈顶;
暂停状态:不在返回栈栈顶,但可见;
停止状态:不在返回栈栈顶,且完全不可见;
销毁状态:活动从返回栈中移除。

典型情况下的声明周期
正在创建onCreate:加载布局、绑定事件等活动的初始化操作;
即将开始onStart:活动由不可见变为可见;
出现在前台并开始活动onResume:运行状态;
正在停止onPause:系统准备去启动或者恢复另一个活动时调用;
即将停止onStop:完全不可见时调用;
正在重新启动onRestar:停止状态变成运行状态。

即将被销毁onDestroy
在这里插入图片描述
系统内存不足时可能会回收进入停止状态的活动所占用的资源;
**onSavedInstanceState()**保证活动被回收之前一定会被调用,解决活动被收回时临时数据得不到保存的问题;
Bundle提供一系列的方法用于保存数据;
Bundle结合Intent:把需要保存的数据保存在Bundle对象中,然后将Bundle对象放在Intent中。在目标活动中先从Intent中取出Bundle,再从Bundle中意义取出数据。

@Override
protected void onSaveInstanceState(Bundle outState){
	super.onSaveInstanceState(outState);
	String tempData ="Something you just typed";
	outState.putString("data_key",tempData);
}
@Override
protected void onCreate(Bundle saveInstanceState){
	super.onCreate(saveInstanceState);
	Log.d(TAG,"onCreate");
	setContentView(R.layout.activity_main);
	if(saveInstanceState != null){
		String tempData=saveInstanceState.getString("data_key");
		Log.d(TAG,tempData);
	}
	...
}

异常情况下的周期声明:Activity被系统回收或者由于当前设备的Configuration发生改变从而导致Activity被销毁重建。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190702154818127.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVp]
在返回栈中调用finish()方法或者按下back键栈顶的活动会被销毁。

随时随地退出程序
用一个专门的集合类对所有的活动进行管理——活动管理器

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());
			}
		}
		activities.clear();
	}
}
public class BaseActivity extends AppCompatActivity{
	@Override
	protected void onCreated(Bundle saveInstanceState){
		super.onCreate(saveInstanceState);
		Log.d("BaseActivity",getClass.getSimpleName());
		ActivityCollector.addActivity(this);//当前活动加入活动管理器
	}
	@Override
	protected void onDestroy(){
		super.onDestory();
		ActivityCollector.removeActivity(this);//将当前活动销毁
	}
}

Activity启动模式

在标签指定android:launchMode属性来选择启动模式。

标准模式standard:默认该模式。每次启动一个Activity时不管该实例是否存在都会重新创建一个新的实例,是系统的默认模式。
单一栈顶模式singleTop:如果新Activity的实例已经存在但不是位于栈顶,那么新Activity会重建该实例,如果存在于栈顶则不会新建该实例【如短信应用】
单一任务栈singleTask:启动activity的时如当前的任务栈中已经有这个activity的实例了, 那么就不会新创建这个activity的实例,并将此activity之上的实例弹出栈【如浏览器】
单一实例模式singleInstance:整个手机系统中只有这一个activity实例,且它在一个单独的任务栈中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值