Android攻城bug分享-01

第一  項目中出現的問題

         android的項目中,難免會使用fragment,也會使用sp來保存一些設置。但在fragment使用sp中的時候會面臨

內存不夠的時候被回收的問題,這個時候程序就會崩潰的情況,即使有全局異常來處理,但不可避免造成不好

的用戶體驗。

第二  問題探究

         在fragment使用上下文,一般有兩種方式,一種是使用activity,另一種是使用application。

使用activity的話,一般是getActivity(),或者採取構造方法來進行傳遞,這樣的方法都可以,但

無論是哪種都會面臨失效爲null的情況。原因相信大家都知道,fragment依附於activity存活。

內存不夠的時候,activity都會幹掉,何況依附於他的小弟。

        另一種是application是跟程序的生命週期綁定的,這個最爲穩妥,但在組件中的量級也最爲重

不是特別的時候,儘量不要使用,但應對崩潰的情況沒辦法的話也可以應急一下。

第三    項目的解決方案-只是自己的方法

        個人覺得比較好的方法最好是合二爲一,這樣既可以避免過多使用application,也可以在一定程度上避免

空指針的出現。

首先,針對application建立單例模式,這個作用就不說了,相信通用的程序都是這樣做的

private static MyApplication instance;

public  static MyApplication getinstance() {

         if (instance == null) {

            instance = new MyApplication();

}

   return instance;

}

接着,一般的話爲進行統一樣式的設置或者一些主題的設置,都會統一建立BaseFragment, 在裏面加入這個方法,

private  Activity activity;

public   Context getContext(){

         if(activity == null){

             return MyApplication.getinstance();

}

   return   activity;

}

上面的代碼相信小夥伴們都能看懂,當出現activity爲空的時候,就去使用application應急,一般的話就用activity最爲合適。連着結合起來進行判斷,當然根據自己的需求可以加入onAttach(),去得到activity

@Override

public void onAttach(Activity activity) {

       super.onAttach(activity);

       activity = getActivity();

}

上面的方法是自己的項目在迭代的時候出現的問題,之前用的是getActivity(),但是程序用個幾個小時,再次打開的就呵呵了,收集錯誤日誌的時候發現是這個毛病,現在依照這樣弄就沒事了。

分享項目中bug,牽扯到原理的一些地方我也不是很瞭解,有錯誤的地方,還請地方指正留言。

小弟在此拜謝了。

簡書地址:https://www.jianshu.com/p/eb9e0bd5f623

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章