首页 > 程序开发 > 移动开发 > 其他 >

Activity生命周期详解

2017-03-03

Activity生命周期详解,Activity的7个生命周期函数中的onStop()函数被调用时是在其对应的activity被另外的activity完全遮挡的时候,如果只有部分遮挡,则不会被调用。

Activity生命周期详解
Activity的生命周期图
\
一.Activity生命周期
Activity中有7个与生命周期有关的函数
1.onCreate() 页面不可见,创建视图,初始化数据
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,屏幕开启了
\
6.当把一个Activity当作提示框的时候,
A:onPause
B:onCreate>onStart>onResume
当B要销毁掉
B:onPause
A:onResume
B:onStop>onDestroy
\
当有电话进来的时候
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

当使用系统的提示对话框的时候,不加载任何生命周期


相关文章
最新文章
热点推荐