生命周期
activity都是利用返回栈来进行管理的
活动状态
运行状态
暂停状态:活动不处于栈顶了,仍然可见,但是不可以操作
停止状态:当一个活动不再处于栈顶位置,并且完全不可见
销毁状态
生存期
onCreate():控件的初始化
onStart():由不可见变为可见
onResume():可交互 PS:onStart和onResume都表示Activity已经可见,但是onStart的时候Activity 还在后台, onResume 的时候Activity才显示到前台。
onPause():启动或者恢复另一个活动的时候调用、调用完毕之后活动还 可见
onStop():调用完毕之后活动完全不可见
onDestroy():activity被销毁之前调用
onRestart():停止状态变为运行状态之前调用
** 如果Activity被回收之前,需要保存重要数据的时候可以重写 onSaveInstanceState(Bundle outState),将数据保存在Bundle中,在Activity第二次被启动的时候会重新调用onCreate(Bundle savedInstanceState) 方法,其中参数就是之前方法保存的值。**
启动模式
standard :不管存不存在相同Activity实例,反正就一直创建
singleTop:检查栈顶是不是当前实例,是的话就不创建,如果不是,创建吧(不能检查栈中间的的实例)
singleTask 在整个栈中都要没有此实例才能创建,换句话说是整个过程中就只能拥有该一个该实例。检查到了的话,其余的activity全都出栈。
singleInstance 解决了共享活动实例,指定的活动会创建一个新的返回栈(异于前面三种模式的返回栈),当前某个栈的实例都出栈出完了的时候,接着另外一个栈进行出栈。
Activity传递数据
通过Intent进行传送
向下一个Activity传送数据
//FirstActivity中
String data = "Hello SecondActivity";
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
intent.putExtra("extra_data", data);
startActivity(intent);
// SecondActivity中
Intent intent = getIntent();
String data = intent.getStringExtra("extra_data");
//也可以将Bundle对象放入Intent中进行封装传送
向上一个活动返回数据
//FirstActivity中
.....
startActivityForResult(intent,1);//添加一个参数作为请求的单一性
// SecondActivity中
setResult(1,new Intent().putExtra("return_data","返回的数据"));
//这儿的RequestCode的意义就是启动SecondActivity可能是多个Activity启动的,根据不同的Code返回不同的结果
//FirstActivity中
protected void onActivityResult(int requestCode,int resultCode,Intent data){//对返回的结果进行处理
if (requestCode == 1){//根据不同的RequestCode处理不同的逻辑
}
}
启动活动的最佳写法
//在SecondActivity中提供静态方法actionStart(Context context, String data1, String data2),在FirstActivity中只需要调用即可,不需要在FirstActivity中指定“键”的信息,这些都在SecondActivity中进行了。
public static void actionStart(Context context, String data1, String data2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("param1", data1);
intent.putExtra("param2", data2);
context.startActivity(intent);
}