Activity的生命周期

时间:2022-01-07 14:44:07

一、知识点

activity各个生命周期中各个函数常见的一些操作

1、onCreate() 初始化的操作  (设置布局    控件的初始化  )
2、onStart() //注册一些监听  (内容观察者)
3、onResume() 再次对数据进行查询
4、onPause() //数据的临时保存
5、onStop() //取消监听   
6、onDestroy() //对资源进行回收 (cursor关闭  bitmap  进行回收)

这里还有两个方法是需要注意一下的:

7、onSaveInstanceState():在onResume()之后调用

8、onRestoreInstanceState(Bundle savedInstanceState) :在onResume()之前调用

9、onConfigurationChanged(Configuration newConfig) :当横竖屏切换的时候被调用

Activity的生命周期


Activity的生命周期


Activity的生命周期

横竖屏切换的时候:
竖屏到横屏:activity首先被销毁,在创建一个新的activity
横屏到竖屏:activity首先被销毁,再创建一个新的activity,再把该activity销毁,再创建一个新的activity.(是由于输入法的影响)



7、 <activity
            android:label="绗竴涓猘ctivity"
            android:name=".MainActivity" 
            android:configChanges="orientation|keyboardHidden">


configChanges="orientation|keyboardHidden: 横竖屏切换的时候不会创建新的Activity
android:configChanges="orientation" : 横竖屏切换时都只创建和销毁一个activity。(默认是竖屏---》横屏:销毁一个,创建一个。横屏到竖屏:销毁一个,创建一个,销毁一个,创建一个。因为受到输入法的影响)


Activity的作用:
起显示作用,他是用来和用户交互的。也是一个view的容器


1 完整的生命周期:
 onCreate() --> onStart() --> onResume()   activiyt已经正常显示
 点击回退键
 onPause() --> onStop() --> onDetroy()


2 可视的生命周期
 onCreate() --> onStart() --> onResume()   activiyt已经正常显示
 打开一个activity。该activity完全覆盖上一个activity
 onPause() ---> onStop()
 点击回退键
 onRestart()  -->  onStart() ---> onResume()
 点击回退键
onPause() --> onStop() --> onDetroy()


3 android:theme="@android:style/Theme.Dialog"
  就可以把activity变成对话框的效果
 onCreate() --> onStart() --> onResume()   activiyt已经正常显示
 打开一个activity。该activity没有完全覆盖上一个activity
 onPause()
 点击回退键
 onResume()



二、生命周期图

Activity的生命周期



3、示例代码

public class MainActivity extends Activity {
private Bitmap bitmap = null;
private static final String TAG = "MainActivity";

// 初始化的操作 (设置布局 控件的初始化 )
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Log.i(TAG, " onCreate ");
if(savedInstanceState != null){
int page = savedInstanceState.getInt("page");

Log.i(TAG, " onCreate page " + page);
}

}

//注册一些监听 (内容观察者)
@Override
protected void onStart() {
// TODO Auto-generated method stub
super.onStart();
Log.i(TAG, " onStart ");
}

@Override
protected void onRestart() {
// TODO Auto-generated method stub
super.onRestart();
Log.i(TAG, " onRestart ");
}

//再次对数据进行查询
@Override
protected void onResume() {
// TODO Auto-generated method stub
super.onResume();
Log.i(TAG, " onResume ");
}

//数据的临时保存
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
Log.i(TAG, " onPause ");
}

//取消监听
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
Log.i(TAG, " onStop ");
}

//对资源进行回收 (cursor关闭 bitmap 进行回收)
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
Log.i(TAG, " onDestroy ");

//cursor.close();
//bitmap.recycle();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putInt("page", 50);

Log.i(TAG, " onSaveInstanceState ");
}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onRestoreInstanceState(savedInstanceState);
int page = savedInstanceState.getInt("page");

Log.i(TAG, " onRestoreInstanceState page " + page);
}

//当横竖屏切换的时候被调用
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);

if(newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE){
Log.i(TAG, " 现在是横屏");
}else if(newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Log.i(TAG, " 现在是竖屏");
}
}


public void open(View v){
Intent intent = new Intent(this,Main2Activity.class);
startActivity(intent);
}



}


(1)oncreate、onstart、onresume、onstop、ondestroy

(2)全部执行的顺序:创建一个activity然后执行,按返回键执行整个顺序;

(3)一般的执行要,全部流程如下:

(4)onCreate方法没有执行完,界面就不会被看到,创建对象

(5)onStart在界面显示的时候才会调用,还不可以和界面进行交互,无法获取焦点

(6)onResume在这个时候,界面还可以真正的进行交互的时候,获取焦点

(7)onPause界面失去交互                   

(8)onStop界面消失,看不见界面

(9)onDestroy的作用:销毁界面

总结的一些常见的生命周期:

当创建一个界面开始运行之后,然后点击home键,运行的流程:Oncreate—onStart---onResume---onPause---onResume---onStop,Activity并没有销毁,然后重新开始的时候,会进行onStop ---onRestart---onStart---onResume

                

当创建一个界面开始运行之后,然后点击back键,运行的流程:Oncreate—onStart---onResume---onPause--onStop--onDestroy ,当activity重新打开的时候 重新从onCreate执行

 

当创建一个界面开始运行之后,然后手机熄屏,运行的流程:Oncreate—onStart---onResume---onPause ---onStop,当activity重新打开的时候onStop--onRestart---onStart---onResume

 

当创建一个界面开始运行之后,然后手机弹出来一个对话框(失去交互),运行的流程:Oncreate—onStart---onResume---onPause,当activity重新打开的时候onPause--onResume