分类: Android平台
2014-10-30 10:27:45
原文地址:android之路,activity的生命周期 作者:一生有你llx
Activity生命周期,需要创建activity时,首先调用oncreate()方法,在oncreate()方法里可以进行许多初始化的操作;接着调用onstart()方法;下一步调用onresume()方法;接下来activity就开始运行了;如果此时调用一个新的activity,那么前一个activity会调用onpause()方法,在此之后系统有权限杀死之前的activity。
如果新调用的activity没有掩盖之前的activity,例如调用了一个对话框,那么在用户再次需要的时候,前一个activity会调用onresume()方法;如果高优先级的进程需要内存,它会杀死前一个activity,用户再次需要前一个activity的时候会调用oncreate()方法重新创建。
如果新调用的activity覆盖了之前的activity,前一个会调用onstop()方法,当用户再次需要前一个activity的时候会调用onrestart()方法;如果高优先级的进程需要内存,它会杀死前一个activity,当用户需要的时候会调用oncreate()方法重新创建。由此可见在onpause方法里面需要保存一些数据,而且要快速的操作,因为下一个activity需要执行。
调用onstop方法以后,如果activity执行完毕了,就会执行ondestroy方法,关闭activity。
Activity保存信息
假设在写短信的时候突然之间来一个电话,那么在挂掉电话之后,短信里编辑的内容还是会存在的。短信这个activity被电话activity打断了,再次返回时需要重新调用oncreate方法,而oncreate方法的参数是一个bundle类型的。Android提供一个函数来保存数据
onSaveInstanseState(Bundle state)
这个函数会在onpause之后ondestroy之前执行,一次需要重写改方法
protected void onSaveInstanseState(Bundle state)
{
super.onSaveInstanceState(state);//在重写该方法之前必须先调用super
String content = txt.getText().toString();//获取editview里的字符
state.putString(CONTENT, content);//将获取的字符串赋值给CONTENT
}
系统在调用oncreate方法的时候会传入参数,默认的是null,如果重写了onSaveInstanseState(Bundle state)方法,那么就因该在oncreate方法里检查参数
if(savedInstanceState != null && savedInstanceState.containsKey(CONTENT))
{
//检测savedInstanceState不等于空,而且savedInstanceState里包含CONTENT内容
txt.setText(savedInstanceState.getString(CONTENT));
//将信息写回edittext
}
Android theme主题样式
android:theme = “@android:style/Theme.Dialog”//对话框
android:theme = “@android:style/Theme.NoTitleBar”//没有标题栏
android:theme = “@android:style/Theme.NoTitleBar.Fullscreen”//全屏
android:theme = “@android:style/Theme.Light//白色背景
android:theme = “@android:style/Theme.Light.NoTitleBar”
android:theme = “@android:style/Theme.Light.NoTitleBar.Fullscreen”
android:theme = “@android:style/Theme.Black”//黑色背景
android:theme = “@android:style/Theme.Black.Light.NoTitleBar”
android:theme = “@android:style/Theme.Black.Light.NoTitleBar.Fullscreen”
android:theme = “@android:style/Theme.Wallpaper”//以壁纸做背景
android:theme = “@android:style/Theme.Wallpaper.NoTitleBar”
android:theme= “@android:style/Theme.Wallpaper.NoTitleBar.Fullscreen”