Fragment還沒有Attach到Activity時,調用了如getResource()等,需要上下文Content的函數。
造成crash
1.描述
關於Fragment(XXFragment) not attached to Activity 異常。出現該異常,是因為Fragment的還沒有Attach到Activity時,調用瞭如getResource()、getString()等,需要上下文Content的函數。
2.原因
2.原因
往往這種問題發生在線程中,尤其是網絡請求線程中。因為父Activity可能無意中destory掉,而線程還在執行,此時在線程中的操作獲取不到父Activity的上下文Content,疑似造成內存洩漏。
3.解決方法有二:
3.解決方法有二:
-將調用的代碼寫在OnStart()中。 (需要調整之前寫過的生命週期,變動太大故不採用)
-在getResources()之前加入isAdded()判斷。(在getResources()之前加入isAdded()判斷)
@Override
public void onStart() {
super.onStart();
if (isAdded()) {//判斷Fragment已經依附Activity
TextView mText01 = getResources().getString(R.string.app_name);
}
}
@Override
public void onStart() {
super.onStart();
if (isAdded()) {//判斷Fragment已經依附Activity
TextView mText01 = getResources().getString(R.string.app_name);
}
}
沒有留言:
張貼留言