[英]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.