[Android基础]Activity的生命周期

今天面试被问及了一个问题:Activity A、Activity B,Activity A 被B覆盖的时候,Activity生命周期中哪几个方法被调用了?Activity A、Dialog B对话框覆盖了Activity A,Activity生命周期中哪些方法被调用了?答案等下揭晓:

我们经常使用Activity,也知道Activity的生命周期中有onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart这些方法,那么这些方法什么时候会被调用呢?

首先我们来看下面经典的生命周期图流程图:

相信不少朋友看过这个流程图,也基本了解了Activity的生命周期:

1,启动一个Activity: 系统会调用 onCreate()--->onStart()--->onResume(),Activity进入运行状态。

2,用户退出当前Activity并关闭应用(如点击返回按钮):系统会调用 onPause()--->onStop()--->onDestroy(),

3,当前Activity被其他Activity覆盖或点击电源键:系统会调用 onPause()--->onStop();Activity进入停滞状态

4,当前Activity跳转到一个新的Activity界面或者点击Home键:系统会调用 onPause()--->onStop();Activity进入停滞状态

5,从上一个Activity返回到当前Activity:系统会调用 onRestart()--->onStart()--->onResume();当前Activity进入运行状态。

6,横竖屏切换:当前Activity 系统会调用 onPause()--->onStop()--->onDestroy(); 然后重新创建一个新的Activity:onCreate()--->onStart()--->onResume();

那么今天面试中的问题:弹出对话框生命周期会是什么情况呢?

7,弹出对话框(PopupWindow,Dialog):

此时系统并没有将Activity从栈顶移除或是有另一个Activity覆盖当前Activity的情况。所以系统并不会调用Activity中生命周期中的方法。

下面结合实例,来演示一下各个情况:

public class MainActivity extends Activity {

    private static final String TAG = "MainActivity";
    private Button mBtnShowDialog;
    private Button mBtnShowPopWindow;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mBtnShowDialog = (Button) findViewById(R.id.button);
        mBtnShowPopWindow = (Button) findViewById(R.id.btn_show_pop);
        mBtnShowDialog.setOnClickListener(listener);
        mBtnShowPopWindow.setOnClickListener(listener);
        Log.i(TAG, "==onCreate()==");
    }

    // 点击事件
    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.button:
                    doShowDialog();
                    break;
                case R.id.btn_show_pop:
                    doShowPopWindow(v);
                    break;
            }
        }
    };

    // 显示对话框
    public void doShowDialog(){
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("对话框");
        builder.setMessage("对话框消息");
        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent = new Intent(MainActivity.this, CameraActivity.class);
                startActivity(intent);
            }
        });
        builder.show();
    }

    // 显示弹窗
    public void doShowPopWindow(View v){
        PopupWindow window = new PopupWindow();
        View view = this.getLayoutInflater().inflate(R.layout.popup_window, null);
        window.setContentView(view);
        window.setWidth(100);
        window.setHeight(100);
        window.showAsDropDown(v);
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        Log.i(TAG,"==onWindowFocusChanged==" + hasFocus);
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(TAG, "==onRestart==");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(TAG, "==onStart()==");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(TAG, "==onResume()==");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(TAG, "==onPause()==");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(TAG, "==onStop()==");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(TAG, "==onDestroy()==");
    }

    // 此方法在被横竖屏切换时会被调用,
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.i(TAG,"==onRestoreInstanceState==");
    }

    // 主要用来在Activity失去焦点,Activity不可显示前保存一些状态值,该方法在onStart方法之后在onStop方法之前被调用
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.i(TAG, "==onSaveInstanceState==");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.i(TAG, "==onConfigurationChanged==");
    }
}

参考其他资料:我添加了onWindowFocusChanged、onSaveInstanceState、onRestoreInstanceState、onConfigurationChanged方法;

1,onWindowFocusChanged方法:Called when the current Window of the activity gains or loses focus.当窗口获取或者失去焦点的时候会被调用。

(1)在Activity被首次被创建,窗口获取到焦点

(2)点击Home键或者点击键锁屏

(3)再次显示应用

还有当用户退出当前Activity,当前Activity被其他Activity覆盖的时候同样也会被调用。(建议屏蔽该方法,以方便后面的测试)

2,onSaveInstanceState方法:Called to retrieve per-instance state from an activity before being killed so that the state can be restored inonCreate(Bundle) or onRestoreInstanceState(Bundle) 在Activity被系统Kill前保存一些状态值,以便在onCreate或者onRestoreInstanceState方法使用。

3,onRestoreInstanceState方法:This method is called after onStart() when the activity is being re-initialized from
a previously saved state, given here in savedInstanceState.当前Activity重新被初始化的时候调用。

4,onConfigurationChanged方法:Called by the system when the device configuration changes while your component is running.当设备的配置发生改变时会被调用。

测试机型:小米2A

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-06 15:11:34

[Android基础]Activity的生命周期的相关文章

Android的activity的生命周期

activity的生命周期有四个重要的状态:活动,暂停,停止,销毁 主要的方法有:onCreate.onStart.onResume.onPause.onStop.onDestory 最常用的方法是:onCreate()和onPause(),前者用于初始化组件,设置activity视图:后者用于持久保存数据. Android的activity的生命周期

Android中activity的生命周期以及使用场景

#1完整生命周期代码如下. package com.wzw.lifecycle; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; public class MainActivity extends Activity { //被创建的时候调用的方法 @Override protected void onCreate(Bund

无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCreate()开始,直到调用onDestory()为止.Activity在onCreate()中设置所有“全局”状态以完成初始化. 而在onDestory()中释放所有系统资源.例如,如果Activity有一个线程在后台运行从网络下载数据,它会在onCreate()创建线程, 而在onDestory()销

[Android]管理Activity的生命周期

一.简要介绍 当用户开始,暂停,退出,重新进入一个APP的时候,APP中Activity实例在它生命周期的不同状态之间转换.比如当你第一次启动一个Activity时,Activity来到系统的前端获得用户焦点.在这个过程中,Android系统调用了一系列生命周期方法.如果用户启动或者切换到另一个APP,系统调用另外一系列的方法. 生命周期调用方法可以说明在用户离开或者重新进入Activity时,Activity执行哪些行为. 接下来我们将解释每一个Activity都有的生命周期方法,并且说明如何

android知识点:Activity的生命周期

应用程序(或Activity)执行的状态称为进程(progress).在 Android操作系统中,每个应用程序都是一个进程.Android框架会维护一个唯一的Activity历史记录堆栈,并观察每个应用程序进程.同时,系统平台会依照系统的内存使用情况和Activity的状态来管理系统内存.Activity类别除了负责运行程序流程与操作系统界面组件外,最重要的就是它提供了开发者控制进程生命周期的函数. Android应用程序的生命周期是由Android框架进行管理的,而不是由应用程序自己直接控制

android中 activity的生命周期

activity的生命周期: 1 : onCreate() --活动第一次被创建时调用,应该在这方法中完成活动初始化操作,如:加载布局,绑定事件 2 : onStart() --活动由不可见变为可见的时候调用 3 : onResume() --活动准备好和用户进行交互的时候调用,此时活动一定位于栈顶,处于运行状态 4 : onPause() --系统准备去启动或者恢复另一个活动的时候调用,通常可以在这个方法中将消耗CPU的资源释放掉 保存一些关键数据,但这个方法执行速度一定要快,不然会影响新的栈

Android中Activity的生命周期

protected void onCreate(Bundle savedInstanceState):当Activity的实例被启动是调用的第一个方法. protected void onStart():该方法在onCreate()方法被调用,或者在Activity从Stop状态转为Actived的状态时调用. protected void onResume():在Activity从Paused状态转到Actived状态时被调用. protected void onPaused():在Activ

android之Activity的生命周期

1.Activity简单介绍: Activity能够简单理解为android手机应用程序中的每个界面. 其有对应的实现Activity类的java类文件(相当于手机界面控制相关逻辑的文件,类似flex页面的脚本文件,或者常见页面形式中的js), 也有响应的布局xml文件,预先设置好响应的布局控件及其大小.颜色等属性. 每个Activity都须要在AndroidManifest.xml文件里注冊,类似于javaweb中servlet,listener须要在web.xml中注冊一样. 2.Activ

4、Android Activity的生命周期 Activity的生命周期

1.完整生命周期 上图是Android Activity的生命周期图,其中Resumed.Paused.Stopped状态是静态的,这三个状态下的Activity存在时间较长. (1)Resumed:在此状态时,用户可以与Activity进行交互,Activity在最前端 (2)Paused:在此状态时,Activity被另外一个Activity遮盖,此Activity不可接受用户输入信息.另外一个Activity来到最前面,半透明的,但并不会覆盖整个屏幕. (3)Stopped:在此状态时,A