安卓Activity
来源:互联网 发布:淘宝接收不到卖家消息 编辑:程序博客网 时间:2024/04/28 09:31
安卓Activty生命周期如下:
1、onCreate与onDestroy对应为一对,是entire lifetime,对应资源分配与销毁。比如按Back按键,则Activity会调用finish()(finish函数调用了onDestroy),资源会被销毁。当通过Intent由界面A到界面B时,也会把界面A资源销毁。
2、onStart与onStop对应为一对,是visible lifetime,对应为可见与不可见。比如按下Home按键,则会加载Home界面显示于当前Activity之上;此时安卓系统操作是将Home界面入栈,置于栈顶(即处于running状态),而Activity则被调用了onPause和onStop处于不可见状态。
3、onResume和onPause对应为一对,是foreground lifetime,对应为是否处于激活状态,即Activity栈的栈顶。比如Activity B位于Activity A之上,但Activity B未完全遮盖住Activity A或者Activity B为透明的,则Activity A仍然是可见的,但此时并非激活状态。从Activity A转换到Activity B过程中,Activity A只是调用了onPause。
安卓系统使用Activity Stack来管理多个Activity,同一时刻只有一个Activity处于栈顶,即处于active或running状态。但是可以有多个Activity处于可见状态,此时这些可见但非active状态的Activity处于pause状态。
系统在内存不足时,会清除一些Activity:被清除优先级依次为empty process>background activity>service progress>visible activity>foreground activity
empty process:无任何Activity或Service与之绑定,仅仅作为cache缓存;
background activity:即被onStop的Activity,此时处于不可见状态;
service progress:绑定了service的Activity进程;
visible activity:被onPause的Activity,可见但非active;
foreground activity:栈顶的Activity
实验:操作1、Home按键;2、Back按键;3、Activity切换;4、切屏
重写函数:
protected void onStart(){
Log.v(MainActivity.ACTIVITY_SERVICE,"onStart");
super.onStart();
}
protected void onResume(){
Log.v(MainActivity.ACTIVITY_SERVICE,"onResume");
super.onResume();
}
protected void onPause(){
Log.v(MainActivity.ACTIVITY_SERVICE,"onPause");
super.onPause();
}
protected void onStop(){
Log.v(MainActivity.ACTIVITY_SERVICE,"onStop");
super.onStop();
}
protected void onDestroy(){
Log.v(MainActivity.ACTIVITY_SERVICE,"onDestroy");
super.onDestroy();
}
1、Home按键:
onPause
onStop
说明系统仅仅采取入栈操作,将主界面入栈,使其位于栈顶;
再次运行应用程序,
onStart
onResume
2、Back按键:
onPause
onStop
onDestroy
说明系统将Activity出栈,其资源被销毁(finish()被运行)
再次运行应用程序
onCreate
onStart
onResume
Activity重新被系统创建启动;可以采用方法使Activity不对Back按键响应,即不运行finish()
3、Activity切换
onPause
onStop
系统将新界面入栈,按Back按键,新界面销毁,原界面显示
onStart
onResume
若设置新界面为透明的,则会只运行onPause。
4、切屏
a、不设置Activity的android:configChanges时
按f12切横屏
onPause
onStop
onDestroy
onCreate
onStart
onResume
表明重新调用一次生命周期
按f12切竖屏
onPause
onStop
onDestroy
onCreate
onStart
onResume
onSaveInstanceState
onPause
onStop
onDestroy
onCreate
onStart
onResume
表明经历两次生命周期
b、设置Activity的android:configChanges="orientation"时
切横屏,调用一次生命周期
onPause
onStop
onDestroy
onCreate
onStart
onResume
切竖屏,调用一次生命周期
onPause
onStop
onDestroy
onCreate
onStart
onResume
实际调用了onConfigChanged函数,可以重载之
c、设置Activity的android:configChanges="orientation|keyboardHidden"时,
切横屏,不调用生命周期,只调用onConfigChanged了函数一次
onConfigChanged
切竖屏,不调用生命周期,只调用onConfigChanged了函数两次次
onConfigChanged
onConfigChanged
当系统启动另外一个新的Activity时,在新Activity启动之前被系统调用保存现有的Activity中的持久数据、停止动画等,这个实现方法必须非常快。当系统而不是用户自己出于回收内存时,关闭了activity 之后。用户会期望当他再次回到这个activity 的时候,它仍保持着上次离开时的样子。此时用到了onSaveInstanceState(),方法onSaveInstanceState()用来保存Activity被杀之前的状态,在onPause()之前被触发,当系统为了节省内存销毁了Activity(用户本不想销毁)时就需要重写这个方法了,当此Activity再次被实例化时会通过onCreate(Bundle savedInstanceState)将已经保存的临时状态数据传入因为onSaveInstanceState()方法不总是被调用,触发条件为(按下HOME键,按下电源按键关闭屏幕,横竖屏切换情况下),你应该仅重写onSaveInstanceState()来记录activity的临时状态,而不是持久的数据。应该使用onPause()来存储持久数据。
- 安卓Activity
- 安卓之Activity
- 安卓activity生命周期
- 安卓Activity
- 初学安卓-------Activity
- 安卓activity生命周期
- 安卓Activity动画
- 安卓面试:activity
- 安卓activity生命周期
- 安卓Activity 生命周期
- 安卓Activity生命周期
- 安卓-管理Activity
- 安卓-Activity生命周期
- 安卓activity生命周期
- 安卓activity生命周期
- 安卓学习-activity
- 安卓 Activity 生命周期
- 安卓 Activity总结
- http-equiv是什么意思
- rdesktop连接windows server 2012无法连接的问题解决
- MySQL修改表类型及表类型简介
- C#获取命令行输出内容的方法简介
- 关于MyEclipse使用Hibernate反向工程生成实体类总是在defalut包中
- 安卓Activity
- RA users Guide
- (一)Java数组与内存控制
- 关于do while(false)
- 关于PVID理解
- Ubuntu10.04搭建Git服务器和GitWeb
- Chart绘图
- 关于CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary AS
- SSH_Secure_Shell_ClientH工具密钥登录linux