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 可以交互
代码:
四.补充
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将单独使用一个任务栈
场景:打电话 、闹铃响
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将单独使用一个任务栈
场景:打电话 、闹铃响
相关文章推荐
- Servlet3.1应用生命周期事件 (转载)
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件