我有垃圾回收問題(我認爲)。 讓我解釋一下:碎片和垃圾收集器
這是我活動的簡化版本:
public Fragment fragA;
public Fragment fragB;
private FragmentManager manager = getSupportFragmentManager();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity);
if (savedInstanceState == null) {
fragA = new FragA();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.container, fragA);
transaction.commit();
}
}
//A USER CLICK ON A BUTTON (in fragment A) TO SHOW FRAGMENT B:
public void showFragB() {
fragB = new FragB();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, fragA);
transaction.commit();
}
//A USER CLICK ON A BUTTON (in fragment B) TO DO SOME ACTIONS THAT REQUIRE fragA:
public void doSomethingWithFragA() {
if (fragA == null)
Log.d("TAG", "WTF HAPPENS!?"
else
Log.d("TAG", "great, we can do the action"
}
現在,大部分的時間這個東西工作正常。 問題是...如果我打開應用程序,按下按鈕(在片段A)顯示片段B,按家庭按鈕(並做一些需要像瀏覽或看到youtube視頻ram),返回到我的應用程序,按其他按鈕(在片段B中)... fragA IS null!
但是該應用程序並沒有完全重新創建,因爲當我回到它時,片段B是可見的,就像應用程序永遠不會關閉它本身。
所以......你能解釋我這種行爲以及如何解決它嗎?
非常感謝!
我不知道這個問題是你的代碼是什麼,但我懷疑* *它是垃圾收集器。 –
爲什麼'fragA'指向一個對象?在你當前的代碼/僞代碼中,只有當'savedInstanceState'爲空(如果正在重新創建活動時情況不是這樣的話),纔在'onCreate()'方法中初始化fragA。 – Luksprog
如果對象太早被銷燬,則沒有理由將該值賦給null。 null本身就是一種價值而不是缺乏價值。 –