zoukankan      html  css  js  c++  java
  • 详解 Android Activity 生命周期

    从以下几个方面详细说一下Activity的生命周期:

      1.回到主屏幕再打开和退出程序的时候

      2.屏幕旋转的时候。

      3.打开其它的Activity的情况。

      4.打开一个Layou透明的Activity的情况。

      源代码:MyApplication.7z

      先来一张Activity的生命周期图镇楼。

      

      新建一个工程,实现如图所示的生命周期的所有方法,只是在方法里添加一个打印输出,让我们能清楚的看到

    当前Activity执行的生命周期回调方法。

    复制代码
        @Override
        protected void onStart() {
            System.out.println("onStart");
            super.onStart();
        }
    
        @Override
        protected void onResume() {
            System.out.println("onResume");
            super.onResume();
        }
    
        @Override
        protected void onPause() {
            System.out.println("onPause");
            super.onPause();
        }
    
        @Override
        protected void onStop() {
            System.out.println("onStop");
            super.onStop();
        }
    
        @Override
        protected void onRestart() {
            System.out.println("onRestart");
            super.onRestart();
        }
    
        @Override
        protected void onDestroy() {
            System.out.println("onDestroy");
            super.onDestroy();
        }
    复制代码

    当我们第一次运行我们的程序,app进入主页面,看一下logcat的输出:执行了onCreate、onStart、onResume方法。

    1.返回到主屏幕的时候。

      我们按一下Home键返回到主屏幕,看一下它的执行的动作。

      执行了onPause和onStop方法。点击我们的app,进入主程序发现它执行了onRestart、onStart和onResume。

    我们第一次运行app的时候是没有执行onRestart方法的。和我们看官方的文档一至,在Activity被停止后再次激活的时候

    才会被调用。

    Called after your activity has been stopped, prior to it being started again. 
    Always followed by onStart()

    我们点击关闭app看一下它会回调哪些生命周期函数。

      这时它会执行onStop和onDestory方法。至此我们走完了一个最简单的生命周期流程。

    2.旋转屏幕的时候。

       运行我们的应用程序,和第一次打开一样调用create,start.和resume

      接下来我们旋转一下屏幕看一下会发生什么。

      一下子。调用了好多。它是先把Activity关闭掉,再重新new一个activity。这里就要注意了,如果我们的程序

    需要支持屏幕旋转,那我这就要调用onSaveInstanceState()方法来保存当前的数据状态,在onCreate方法里恢复

    这些状态的值。

    3.打开一个其它的Activity.

      修改一个我们的程序,在主页面加一个按钮,再加一个Activity。

    复制代码
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button"
            android:layout_below="@+id/textView"
            android:layout_centerHorizontal="true"
            />
    复制代码

      点击按钮的时候打开我们新添加的Activity

    复制代码
            final Button btn = (Button) findViewById(R.id.button);
            btn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(MainActivity.this, MessageTip.class);
                    startActivity(intent);
                }
            });
    复制代码

      运行我们的App.还是和之前一样调用 onCreate(),onStart() 和onResume.

      然后在主页面上按一下我们的按钮,打开另一个Activity.

      按返回键看一下。

      它会调用onRestart(),onStart(),onResume。这样和我们讲的方法1.进入主屏幕再返回是一样的。

    4.打开透明的Activity.

      透明的Activity我们做一个简单的,直接在AndroidManifest.xml里添加一个行代码

      

      再运行我们的app.调用那三个方法。

      点击主页上的按钮打开透明的Activity.看一下调用了哪些函数。

      只调用了onPause。点击返回

    调用了onResume()方法。

    发现没打开透明的Activity,原Acitvity没有调用onStop()方法,关闭透明的Activity。原Activity没有调用onRestart()

    和onStart()方法。

    ok就到这里,activity的生命周期非常重要!activity的生命周期非常重要!activity的生命周期非常重要!

    重要的事情说三遍!!

    源代码:MyApplication.7z

  • 相关阅读:
    nginx 配置文件详解
    nginx的location匹配规则
    mysql常用函数
    jquery封装的ajax请求
    docker
    in与exists和not in 与 not exists的区别
    mysql授权
    线程池
    springboot+rediscluster
    常用网址
  • 原文地址:https://www.cnblogs.com/lizhenlin/p/4988024.html
Copyright © 2011-2022 走看看