簡體   English   中英

在非頂級活動上調用finish()時會發生什么

[英]What exactly happens when finish() is called on a non-top activity

假設我們以某種方式引用了不在活動堆棧頂部的活動。 我們可以在此活動上調用finish() ,在這種情況下究竟會發生什么?

另外,堅持非頂級活動的合法理由是什么? 將引用保存在某個靜態字段中是訪問非熱門活動的一種方式,但這與最佳做法背道而馳。

是的,我們可以在此活動上調用finish() 前台活動和后台活動沒有區別。

Intent intent = new Intent(this, ActivityB.class);
startActivity(intent); // Now this Activity goes to background

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        Toast.makeText(getApplicationContext(), "Finish", Toast.LENGTH_SHORT).show();
        finish(); // Finished as normal.
    }
}, 2000);

避免持有對靜態文件的活動引用。 它將導致內存泄漏。

在此活動上使用finish(),在這種情況下究竟會發生什么?

我確定可以。 如果非熱門活動仍在屏幕上可見,您將最終得到黑屏。

另外,堅持非頂級活動的合法理由是什么?

我認為,如果必須保留對當前處於后台的活動的引用,則必須考慮您的設計是否正確。 如果您由於GC無法收集舊的活動而徘徊,這將導致大量的內存泄漏。

將引用保存在某個靜態字段中是訪問非熱門活動的一種方式

您應該使用類似Constants.java的類來放入非頂級活動中的所有靜態字段,並重用Constants.java中的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM