- 最後登錄
- 2022-8-19
- 在線時間
- 118 小時
- 註冊時間
- 2009-3-1
- 閱讀權限
- 20
- 精華
- 0
- UID
- 5937142
- 帖子
- 234
- 積分
- 153 點
- 潛水值
- 19415 米
| 如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。 本帖最後由 RainieYang 於 2018-11-20 01:16 PM 編輯
安安,小弟想請問各位一個記憶體洩漏的情境,大致如下:
兩個Activity A,B;
A 裡面有一個物件C的實例,而B也有C這個實例的參照,這時候把A銷毀,那A有辦法被GC回收嗎?
- public class A extends Activity{
- private C c = new C();
- }
複製代碼- public class B extends Activity{
- private C c;
- onCreate(){
- // 這邊B想辦法用自己的c 抓住A中C的實例
- }
- }
複製代碼
--------------補充內容-------------------補充完整程式碼大概像下面這樣,A 去啟動 B,順便把自己的Member C傳遞過去讓B接收。
接收完成後,呼救A.finish(),讓A銷毀,但這時候B還持有A的Member實例c的參照,這種情況是否會導致A的記憶體無法被回收呢?
- public class C implements Serializable {
- private static final long serialVersionUID = -7060210544600464481L;
- }
複製代碼- public class A extends Activity {
- private C c = new C();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_a);
- Intent intent = new Intent(this,B.class);
- Bundle bundle = new Bundle();
- bundle.putSerializable("C", c);
- intent.putExtras(bundle);
- startActivity(intent);
- }
- }
複製代碼- public class B extends Activity {
- private C c;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_b);
- Intent intent = getIntent();
- c = (C) intent.getSerializableExtra("C");
- }
- }
複製代碼
... |
|