Android学习之路 Activity 和 Fragment 生命周期
程序员文章站
2022-05-14 08:05:45
...
Android Activity Fragment 生命周期理解
一 Activity生命周期
Activity声明周期的组成
onCreate onStart onResume onPause onStop onDestory onRestart
(1)onCreate
创建Activity回调,一个Activity生命周期内只会调用一次
(2)onStart
启动Activity时回调,在onRestart()调用后也会调用onStart
(3)onResume
恢复Activity时回调,在onStart后一定会调用该方法
(4)onPause
当Activity失去焦点时,或被一个新的非全屏的Activity,或被一个透明的Activity放置在栈顶时,
Activity就转化为Paused状态。但我们需要明白,此时Activity只是失去了与用户交互的能力,
其所有的状态信息及其成员变量都还存在,只有在系统内存紧张的情况下,才有可能被系统回收掉。
(5)onStop
当Activity被另一个Activity完全覆盖时调用(即另一个Activity已经处于处于栈顶可以与用户完成交互时),
或者退出程序时调用。
(6)onDestroy
销毁Activity时调用,和onCreate方法一样,该方法也只会调用一次,标志该Activity生命周期的结束
引用官方文档的Activity生命周期流程图
该流程图完成的展示了一个Activity从启动到销毁的流程。下面来代码来验证流程:下面的程序定义了两个Activity(MainActivity , TestActivity),在MainActivity的布局文件中定义一个Button用
来启动TestActivity,然后重写Activity的生命周期回调函数,在回调函数中用日志Log来记录被调用的过程。其中
MainActivity日志以“Activity”开头 ,TestActivity以“Test”开头.
布局文件就一个Button 和一个onClick事件监听方法BtnOnClickListener,不再列出布局文件代码
MainActivity代码:
public class MainActivity extends AppCompatActivity {
final static String TAG = "ACTIVITY" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG , "Activity oncreate");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG , "Activity onresume");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG , "Activity onstart");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG , "Activity onpause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG , "Activity onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG , "Activity onDestory");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG , "Activity onrestart");
}
public void BtnOnClickListener(View view )
{
//在MainActivity中启动TestActivity
Intent intent = new Intent() ;
intent.setClass(MainActivity.this , TestActivity.class) ;
startActivity(intent);
}
}
TestActivity代码:public class TestActivity extends Activity {
final static String TAG = "TEST" ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView textView = new TextView(this) ;
textView.setText("测试文本");
textView.setTextSize(30);
setContentView(textView);
Log.d(TAG , "TEST oncreate");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG , "TEST onresume");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG , "TEST onstart");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG , "TEST onpause");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG , "TEST onStop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG , "TEST onDestory");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d(TAG , "TEST onrestart");
}
}
启动观察:此时点击Button按钮,进入TestActivity
点击返回到MainActivity有:
分析得到:
1 自然启动过程 创建onCreate(只在创建的时候调用一次)----->启动onStart(在Stop后Restart可再此进入该步骤)-------> 恢复onResume(在Pause后恢复时再此调用)------->运行状态>2 自然退出过程暂停onPause()-------->停止onStop()-------->销毁onDestory()-------->结束>
推荐阅读
-
重温Android和Fragment生命周期
-
荐 Android学习之详解Activity的生命周期
-
Android Activity生命周期和堆栈管理的详解
-
重温Android和Fragment生命周期
-
android开发实例(activity生命周期和启动模式、IPC机制)
-
【Android学习之路】Android布局和控件认识
-
黑马Android76期学习笔记01基础--day06--拨打电话、Intent、activity生命周期,任务栈、activity的四种启动模式
-
ViewPager学习+fragment和activity通信
-
Android开发艺术探索——1.Activity的生命周期和启动模式
-
[AS 学习笔记] Activity生命周期和启动模式