Android讀書筆記一:假設當前Activity為A,如果這時使用者開啟一個新的Activity B,那麼B的onResume和A的onPause哪個先執行呢?

來源:互聯網
上載者:User

標籤:5.0   android   一個   回調   col   ext   etc   src   print   

問題描述:假設當前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.onPause03-31 17:08:56.187 4861-4861/com.art.exploration I/System.out: BActivity.onStart03-31 17:08:56.189 4861-4861/com.art.exploration I/System.out: BActivity.onResume03-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 willbe 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

Android讀書筆記一:假設當前Activity為A,如果這時使用者開啟一個新的Activity B,那麼B的onResume和A的onPause哪個先執行呢?

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.