Android:Activity:生命周期
来源:互联网 发布:拍证书的软件 编辑:程序博客网 时间:2024/06/02 03:35
Activity有三个状态:
当它在屏幕前台时(位于当前任务堆栈的顶部),它是激活或运行状态。它就是响应用户操作的Activity。
当它上面有另外一个Activity,使它失去了焦点但仍然对用户可见时(如右图),它处于暂停状态。
在它之上的Activity没有完全覆盖屏幕,或者是透明的,被暂停的Activity仍然对用户可见,并且是存活状态(它保留着所有的状态和成员信息并保持和窗口管理器的连接)。
如果系统处于内存不足时会杀死这个Activity。 当它完全被另一个Activity覆盖时则处于停止状态。
它仍然保留所有的状态和成员信息。然而对用户是不可见的,所以它的窗口将被隐藏,如果其它地方需要内存,则系统经常会杀死这个Activity。 当Activity从一种状态转变到另一种状态时,会调用以下保护方法来通知这种变化:
void onCreate(Bundle savedInstanceState)
void onStart()
void onRestart()
void onResume()
void onPause()
void onStop()
void onDestroy()
生命周期图
这七个方法定义了Activity的完整生命周期。实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环:
关于前台生命周期循环的例子请见下方。
1》创建一个Activity,添加七个生命周期方法,方法内输出各个方法名称。再添加一个按钮用于打开下面新添加的Activity。
startActivity(new Intent(LifeActivity.this,CustomDialogActivity.class));
2》添加一个新Activity,代码如下:
public class CustomDialogActivity extends Activity {
@Overrideprotected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//必须在调用setContentView()之前调用requestWindowFeature()
requestWindowFeature(Window.FEATURE_LEFT_ICON);//要标题栏显示图标
setContentView(R.layout.dialog_activity);
getWindow().setFeatureDrawableResource(Window.FEATURE_LEFT_ICON,android.R.drawable.ic_dialog_alert);//设置图标
}
}
3》在AndroidManifest.xml文件配置Activity,并且通过主题指定该Activity以对话框样式显示。
<applicationandroid:icon="@drawable/icon"android:label="@string/app_name" >
.....
<activity android:name=".CustomDialogActivity"android:label="对话框activity"
android:theme="@android:style/Theme.Dialog"/>
</application>
Activity的onSaveInstanceState()和onRestoreInstanceState()方法
Activity的 onSaveInstanceState()和onRestoreInstanceState()并不是生命周期方法,它们不同于onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()才会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
另外,当屏幕的方向发生了改变,Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的onSaveInstanceState()和onRestoreInstanceState()方法,如下:
public class PreferencesActivity extends Activity {
private String name;
protected void onRestoreInstanceState(Bundle savedInstanceState) {
name = savedInstanceState.getString("name"); //被重新创建后恢复缓存的数据
super.onRestoreInstanceState(savedInstanceState);
}
protected void onSaveInstanceState(Bundle outState) {
outState.putString("name","liming");//被摧毁前缓存一些数据
super.onSaveInstanceState(outState);
}
}
- 【Android】【Activity生命周期】Activity生命周期
- Android activity的生命周期
- Android Activity 生命周期
- Android:Activity的生命周期
- Android 之 Activity 生命周期
- Android Activity生命周期
- android之activity生命周期
- Android Activity生命周期总结
- Android 之 Activity 生命周期
- Android Activity的生命周期
- Android Activity的生命周期
- android中的activity生命周期
- Android---Activity生命周期状态
- Android中Activity生命周期
- Android Activity的生命周期
- Android activity的生命周期
- Android---Activity生命周期状态
- Android---Activity生命周期状态
- js判断object类型
- 连接数据库超时设置autoReconnect=true
- Spark 综合应用
- Android各种屏幕分辨率(VGA、HVGA、QVGA、WQVGA、WVGA、FWVGA) 详解
- 元编程笔记
- Android:Activity:生命周期
- java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
- AndroidStudio介绍,代理配置,特性,技巧及从eclipse迁移到as
- Inbox (100500)
- [转]MySQL 5.7 新特性大全和未来展望
- [leetcode] 229. Majority Element II 解题报告
- How to create a Maven web app and deploy to Tomcat - fast
- java.net.UnknownHostException
- JQuery调用iframe子页面函数/对象的方法