zoukankan      html  css  js  c++  java
  • Android DevArt1:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?

    问题描述:假设当前Activity为A,如果这时用户打开一个新的Activity B,那么B的onResume和A的onPause哪个先执行呢?

    GitHub Demo

    废话少说,上代码,Activity A :

    public class AActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_a);
        }
    
        public void goToBActivity(View view) {
            startActivity(new Intent(this, BActivity.class));
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            System.out.println("AActivity.onPause");
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            System.out.println("AActivity.onStop");
        }
    }

    BActivity:

    public class BActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_b);
        }
    
        @Override
        protected void onStart() {
            super.onStart();
            System.out.println("BActivity.onStart");
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            System.out.println("BActivity.onResume");
        }
    }

    Log:

    03-31 17:08:56.144 4861-4861/com.art.exploration I/System.out: AActivity.onPause
    03-31 17:08:56.187 4861-4861/com.art.exploration I/System.out: BActivity.onStart
    03-31 17:08:56.189 4861-4861/com.art.exploration I/System.out: BActivity.onResume
    03-31 17:08:56.569 4861-4861/com.art.exploration I/System.out: AActivity.onStop

    通过上述测试可以发现,在Android 5.0系统上,旧的AActivity的onPause先调用,然后新的BActivity才会启动。

    在Android Activity源码中对onPause的解释里有这样一句话:

    When activity B is launched in front of activity A, this callback will
    be invoked on A.  B will not be created until A's {@link #onPause} returns,
    so be sure to not do anything lengthy here.

    意思是当活动B在活动A前面启动时,该回调将在A上被调用。在A的onPause返回之前,B不会被创建,所以请确保在这里不做任何事情,及不能做耗时操作,会影响B的启动。

    通过分析这个问题,我们知道onPause和onStop都不能做耗时操作,尤其是onPause,也就是说尽量在onStop中操作,从而不影响新的Activity尽快显示出来并切换到前台。

    注:这篇博客是笔者根据《Android开发艺术探索》一书案例做的实测,希望能帮助到大家。

     GitHub Demo

  • 相关阅读:
    java中反射
    mysql 的锁机制和ACID
    名词记忆
    switch语法之PHP
    PHP代码批量加密
    windows 20003 扩展安装后不成功的原因
    apache配置虚拟目录
    移动web在ios和android下点击元素出现阴影问题
    同时屏蔽ios和android下点击元素时出现的阴影
    DES
  • 原文地址:https://www.cnblogs.com/jooy/p/8683167.html
Copyright © 2011-2022 走看看