您好,登錄后才能下訂單哦!
如果在一個類的成員位置定義了靜態(tài)變量,如果想類生成的時候這個變量初始化,就得在構造方法里初始化,而不能在成員位置。
實際開發(fā)時的情景:友盟分享,分享的標題在后臺動態(tài)配置,沒有網絡的情況下顯示默認值。
見鬼的情況:在有網的情況下,分享之后,然后斷網分享的標題竟然不是默認的TITLE,而是之前從網絡獲取的分享標題。后來我苦思冥想,在成員位置明明初始化了,怎么沒有設置上默認的標題。
問題解決:最終的問題還在于static關鍵字,static的生命周期。在有網的情況下分享成功之后TITLE被賦與了新值,而在TITLE所在的類(一個Popwindow)重新加載的時候,TITLE并不會隨著Popwindow的創(chuàng)建而創(chuàng)建,而是一直存在,一直保留著之前有網情況下分享的標題。
2.對于Adapter,如果它的數據源是靜態(tài)變量的,數據源變了,adapter不需要notifydatasetchanged就會改變adapter的ui.
實際開發(fā)時的情景:Spinner加載數據。
名師定制,是一個Fragment,Spinner的數據是通過一個叫做SpinnerData的類進行管理的,里面全部是靜態(tài)的變量和方法,在進入MainActivity里就通過getType()這個靜態(tài)方法來請求數據,請求成功之后會將數據解析給classObjects這個靜態(tài)的List。
錯誤代碼1:在名師定制這個Fragment初始化的時候,
classBeens.addAll(SpinnerData.classObjects);
實際我在debug的時候,SpinnerData.classObjects是沒有真實的數據的。(在MainActivity里發(fā)起的異常請求還沒有成功的解析出數據)
錯誤代碼2:作者以為SpinnerData里有數據,將數據賦值給函數的Spinner
initSpinner1(context, spinner1, SpinnerData.typeNames); initSpinner2(context, spinner2, SpinnerData.GlassNames);
這時我debug的時候SpinnerData.typeNames,SpinnerData.ClassNames仍然是沒有數據的。后面除了
左邊的Spinner點擊的時候會聯動右邊的Spinner,其它的沒有Spinner相關的數據請求操作。
見鬼的情況:兩個Spinner竟然會有數據?。。。。。。。。?!于是我猜想靜態(tài)數據綁定adapter是不是不需要notify?做了下面一個試驗,給adapter綁定靜態(tài)的數據源,在按鈕點擊時只改變靜態(tài)數據源,這時ListView竟然添加了新的數據?。。。。。?!
這就解釋了兩個Spinner怎么一開始設置的沒有數據的數據源竟然會顯示數據。
同時還有另外一個bug:如果不點擊左邊的spinner,直接點擊右邊的spinner,崩潰報classBeans角標越界。還是Fragment一開始下面這行代碼的問題。
classBeens.addAll(SpinnerData.classObjects);
因為在MainActivity里執(zhí)行的SpinnerData的getType請求網絡的方法,無法知道它何時回調成功。于是在SpinnerData類里寫了個監(jiān)聽器,監(jiān)聽它的數據回調成功。
在Fragment里設置監(jiān)聽:
@Override public void initData() { //監(jiān)聽數據源的變化,因為是異步調用的,我不知道數據什么時候發(fā)生了變化。 SpinnerData.setOnDataChangedListener(this);
...}
@Override public void onDataChanged() { classBeens.clear(); classBeens.addAll(SpinnerData.classObjects); }
3.接入Geesee直播平臺,將它的Player寫成單例之后出現的問題:
第一次進入app可以正常播放,再次進入就無法正常播放。如果卸載app重裝第一次進入也能
正常播放,后來想想應該是Player的生命周期太長了,緩存太多播放的狀態(tài)。
所以單例,static也要慎用??!
-------------------------------------------------------------------------------------
有時候越是這種見鬼的問題,越可能是我們對于一些概念并沒有真正的理解導致的。
static
同步與異步
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。