Activity生命周期详解
Activity的生命周期图
一.Activity生命周期
Activity中有7个与生命周期有关的函数
1.onCreate()
页面不可见,创建视图,初始化数据
2.onStart() 页面可见了,但是不可人机交互
3.onResume() 页面可见了,但是可以人机交互
4.onPause() 页面可见,但是失去焦点
5.onStop() 页面不可见,完全消失
6.onRestart() 页面重新启动,
7.onDestroy() 页面完全销毁了
2.onStart() 页面可见了,但是不可人机交互
3.onResume() 页面可见了,但是可以人机交互
4.onPause() 页面可见,但是失去焦点
5.onStop() 页面不可见,完全消失
6.onRestart() 页面重新启动,
7.onDestroy() 页面完全销毁了
onCreated()是activity第一次被启动时执行的,主要是初始化一些变量
onStart()是activity界面被显示出来的时候执行的
onResume()是当该activity与用户能进行交互时被执行
onPause()是另一个activity被启动,当前的activity就被暂停了,一般在该函数中执行保存当前的数据
onStop()表示另一个activity被启动完成时,当前activity对用户同时又完全不可见时才调用的
onRestart()是当前activity重新被启动时调用的;绑定一些监听器等
onDestroy()是退出当前activity时调用的,当然如果程序中调用finish()或者说android系统当前资源不够用时就会被调用
Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。部分遮挡一般是以消息activtiy的形式出现,这个只需在AndroidManifest.xml中将其对于的activity的主题设置theme中更改。
代码演示
在新建一个MainActivity,在activity_main.xml文件中添加一个Button按钮用于调用第2个Main2Activity,在activity_main2.xml中添加一个TextView用于提示,并且每个activity都重写了这7个生命周期函数,每个生命周期中打印出一条语句,以表示activity在执行的生命周期函数。
界面显示
首先在清单文件中添加跳转页面,在这里我使用部分遮挡只需在AndroidManifest.xml中将其对于的activity的主题设置theme
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.zhiyuan3g.activitytest"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Main2Activity" android:theme="@style/Theme.AppCompat.Dialog"></activity> </application> </manifest>
2.在MainActivity中添加Button控件并且实例化添加监听用于点击事件
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.i("=====TAG=====", "=====>A===onCreate"); Button btn = (Button) findViewById(R.id.button); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(); intent.setClass(MainActivity.this, Main2Activity.class); startActivity(intent); } }); } @Override protected void onStart() { super.onStart(); Log.i("=====TAG=====", "=====>A===onStart"); } @Override protected void onResume() { super.onResume(); Log.i("=====TAG=====", "=====>A===onResume"); } @Override protected void onPause() { super.onPause(); Log.i("=====TAG=====", "=====>A===onPause"); } @Override protected void onStop() { super.onStop(); Log.i("=====TAG=====", "=====>A===onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("=====TAG=====", "=====>A===onDestroy"); } @Override protected void onRestart() { super.onRestart(); Log.i("=====TAG=====", "=====>A===onRestart"); } }
3.Main2Activity
public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Log.i("=====TAG=====","=====>B===onCreate"); } @Override protected void onStart() { super.onStart(); Log.i("=====TAG=====","=====>B===onStart"); } @Override protected void onResume() { super.onResume(); Log.i("=====TAG=====","=====>B===onResume"); } @Override protected void onPause() { super.onPause(); Log.i("=====TAG=====","=====>B===onPause"); } @Override protected void onStop() { super.onStop(); Log.i("=====TAG=====","=====>B===onStop"); } @Override protected void onDestroy() { super.onDestroy(); Log.i("=====TAG=====","=====>B===onDestroy"); } @Override protected void onRestart() { super.onRestart(); Log.i("=====TAG=====","=====>B===onRestart"); } }
运行程序
1.程序运行自动调用
onCreate()>onStart()>onResume()
2.当你点击Home键的时候调用
onPause>onStop,页面完全消失
3.运行跑到后台任务中
onRestart>onStart>onResume,页面重新加载,可以人机交互
4.当你点击Back键的时候
onPause>onStop>onDestroy
5.当点击关闭屏幕按钮的时候
onPause>onStop,屏幕关闭了
onRestart>onStart>onResume,屏幕开启了
onRestart>onStart>onResume,屏幕开启了
6.当把一个Activity当作提示框的时候,
A:onPause
B:onCreate>onStart>onResume
当B要销毁掉
B:onPause
A:onResume
B:onStop>onDestroy
A:onPause
B:onCreate>onStart>onResume
当B要销毁掉
B:onPause
A:onResume
B:onStop>onDestroy
当有电话进来的时候
onPause>onStop,接打电话开始了。
onRestart>onStart>onResume,电话挂断,
回到应用
onPause>onStop,接打电话开始了。
onRestart>onStart>onResume,电话挂断,
回到应用
当从页面A跳转至页面B
A:onPause
B:onCreate>onStart>onResume
A:onStop
当从页面B点击返回按钮时,回到页面A
B:onPause
A:onRestart>onStart>onResume
B:onStop>onDestroy
A:onPause
B:onCreate>onStart>onResume
A:onStop
当从页面B点击返回按钮时,回到页面A
B:onPause
A:onRestart>onStart>onResume
B:onStop>onDestroy
当使用系统的提示对话框的时候,不加载任何生命周期