public void replaceFragment(Fragment fragment) {
FragmentTransaction ft = manager.beginTransaction();
ft.replace(R.id.container, fragment);
ft.commit();
}
R.id.container是一個FrameLayout,用來放fragment,我快速點擊幾個按鈕替換fragment會引起記憶體泄漏。
具體看下圖:


fragment 我只是簡單在上面放一些控制元件,具體類里面我連findViewById都還進行。但是就是會出錯。
replaceFragment的呼叫,我每次都是new一個新的對應fragment。
麻煩大佬指點一下。
uj5u.com熱心網友回復:
不要每次都replace啊uj5u.com熱心網友回復:
repalce等于add remove
uj5u.com熱心網友回復:
private boolean isFirstLoad = false;//初始化為false@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isFirstLoad && isVisibleToUser) {
isFirstLoad = false;
}
}
避免重復加載就可以
uj5u.com熱心網友回復:
問題是我的框架是下面有一排按鈕,很多,沒點一個上面的區域就要顯示對應的fragment,如果我不用replace的方式,釋放原理的,那么最后有可能就相當于所有fragment多存在,這樣很耗記憶體。
uj5u.com熱心網友回復:
private boolean isFirstLoad = false;//初始化為false
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isFirstLoad && isVisibleToUser) {
isFirstLoad = false;
}
}
避免重復加載就可以
我的fragment沒初始化,就一個空殼。就onCreateView時用inflate創建view,然后就啥都不敢。
uj5u.com熱心網友回復:
我覺得如果是Viewpager+Fragment的話,你的問題出現在Adapter的getItem()上,至于其他我也不清楚你如何撰寫的代碼。可以參考https://blog.csdn.net/qq_32536991/article/details/88837924uj5u.com熱心網友回復:
我覺得如果是Viewpager+Fragment的話,你的問題出現在Adapter的getItem()上,至于其他我也不清楚你如何撰寫的代碼。可以參考https://blog.csdn.net/qq_32536991/article/details/88837924
沒用Viewpager
uj5u.com熱心網友回復:
好像是EditText引起的,只要fragment上面放了EditText就會。uj5u.com熱心網友回復:
不要每次都replace啊
不要每次都replace啊
repalce等于add remove
問題是我的框架是下面有一排按鈕,很多,沒點一個上面的區域就要顯示對應的fragment,如果我不用replace的方式,釋放原理的,那么最后有可能就相當于所有fragment多存在,這樣很耗記憶體。
用add然后顯示show
uj5u.com熱心網友回復:
你用replace性能才不高呢uj5u.com熱心網友回復:
你用replace性能才不高呢
幾十個fragment都一起add,太瘋狂了。
uj5u.com熱心網友回復:
看泄漏提示是軟體盤相關的問題,你可以回傳上一個頁面再看看會不會有泄漏提示理論上回傳后就不會提示了
uj5u.com熱心網友回復:
你用replace性能才不高呢
幾十個fragment都一起add,太瘋狂了。
你可以用誰加誰啊,fragment是輕量級的
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/88399.html
標籤:Android
