您的位置:首页 > 移动开发 > Android开发

Android_Activity生命周期

2016-05-26 22:45 483 查看
一.每个活动在其生命周期最多会有四种状态

1>运行状态

当一个活动返回栈的栈顶时,这使得活动处于运行状态(系统最不愿意回收这种状态,因为会给用户带来非常差的体验)

2> 暂停状态

当一个活动不在栈顶,但也能看见,这时候的活动处于暂停状态(系统的内存低的时候,系统菜会回收这种活动,因为也会带非常差的体验)

3> 停止状态

当一个活动不在栈顶,处于不可见的状态,这时候的活动处于停止状态(当其他地方需要内存的时候,系统有可能会回收这种状态的活动)

4>销毁状态

当一个活动移除栈中的时候,活动处于销毁的状态(系统最先回收这种的状态的活动,从而来保证内存的充足)

二 Activity类中定义了7个回调方法,覆盖了活动生命的周期的每一个环节。

1. onCreate()

在活动第一次创建的时候会调用

2. onStart()

这个方法在活动由不可见到可见的时候调用

3.onResume()

这个方法在活动最备好和用户交互的时候会被调用(这个时候的活动一定位于返回栈的栈顶,处于运行状态)

4.onPause()

这个方法一般是系统准备开启或者恢复另一个活动的时候调用(通常需要我们能关闭一些消耗CPU的资源,或者保存一些数据,这个方法的执行速度一定要快,不然会影响新的栈顶的活动)

5.onStop()

这个方法在活动完全不可见的时候备调用,

6.onDestroy()

这个方法在程序的销毁前调用,这时候的活动状态处于销毁状态

7.onRestart()

这个方法在活动由暂停到运行状态之前会被调用

三 .根据这7中周期分为3种生存周期

1>完整的生存周期 onCreate ——onDestroy

演示方法

启动一个Activity并关闭

oncreate 创建

onstart 可见

onResume 可以交互

onPause 失去焦点

onstop 不可见

ondestroy 销毁

2>可见的生存周期 onStart ——onStop

通过Main Activity 跳转到 B Activity,BActivity 完全覆盖了MainActivity

onPause失去焦点

onStop 不可见

onRestart 从新启动

onStart 可见

onResume 可以交互

3>活动的生存周期 onResume ——onPause

通过MainActivity跳转到B Activity,B Activity 不是完全覆盖 MainActivity

如果使B Activity不完全覆盖 MainActivity

两种方式:

a、B Activity做成一个对话框形式

b、B Activity 做成一个透明的效果

onPause 失去焦点

onResume 可以交互

代码:

public class MainActivity extends Activity {

private static final String tag = "MainActivity";

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout. activity_main);

Log. i(tag, "onCreate");
}

@Override
protected void onStart() {
super.onStart();
Log. i(tag, "onStart");
}

@Override
protected void onRestart() {
super.onRestart();
Log. i(tag, "onRestart");
}

@Override
protected void onResume() {
super.onResume();
Log. i(tag, "onResume");
}

@Override
protected void onPause() {
super.onPause();
Log. i(tag, "onPause");
}

@Override
protected void onStop() {
super.onStop();

Log. i(tag, "onStop");
}

@Override
protected void onDestroy() {
super.onDestroy();

Log. i(tag, "onDestroy");
}

public void click(View view) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class );
startActivity(intent);
}

}


四.补充

1……横竖屏切换

如果想横竖屏切换时,不重新走生命周期,需要清单为Activity配置属性:configChanges

也可以设置屏幕 锁定为横屏或竖屏 ,screenOrientation:lanscape | portriant

2……启动模式

在Android中, 启动一个Activity有时需要创建一个新对象, 有时需要复用已有的对象, 可以通过在配置activity时通过launchMode属性指定

launchMode属性值(4个)为:

standard:

标准模式,每次调用startActivity()方法就会产生一个新的实例。这是默认的模式

singleTop:

如果已经有一个实例位于Activity栈的顶部时,就不产生新的实例;如果不位于栈顶,会产生一个新的实例。

保证栈顶只有一个实例,任务栈中可能有很多实例

场景:浏览器 书签

singleTask:

只有一个实例, 默认在当前Task中

保证 所在的任务栈 ,只有一个实例

比如说设置 A 为此模式,保证整个任务栈只有A一个实例,如果栈顶有其他Activity,再打开A时,将栈顶其他Activity全部出栈。

场景 如:webkit 内核

singleInstance:

只有一个实例, 创建时会新建一个栈, 且此栈中不能有其它对象

保证整个系统的栈中,只有一个实例

比如说设置 A 为此模式,那么 A将单独使用一个任务栈

场景:打电话 、闹铃响
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 生命周期