欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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");
    }
}
启动观察:
Android学习之路 Activity 和 Fragment 生命周期
此时点击Button按钮,进入TestActivity
Android学习之路 Activity 和 Fragment 生命周期
点击返回到MainActivity有:
Android学习之路 Activity 和 Fragment 生命周期
分析得到:
1 自然启动过程 创建onCreate(只在创建的时候调用一次)----->启动onStart(在Stop后Restart可再此进入该步骤)-------> 恢复onResume(在Pause后恢复时再此调用)------->运行状态>2 自然退出过程暂停onPause()-------->停止onStop()-------->销毁onDestory()-------->结束>