亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

關于靜態常量造成的那些見鬼的情況我不得感慨一下

發布時間:2020-07-26 08:24:02 來源:網絡 閱讀:286 作者:屠夫章哥 欄目:移動開發


  1. 如果在一個類的成員位置定義了靜態變量,如果想類生成的時候這個變量初始化,就得在構造方法里初始化,而不能在成員位置。

  實際開發時的情景:友盟分享,分享的標題在后臺動態配置,沒有網絡的情況下顯示默認值

   

  關于靜態常量造成的那些見鬼的情況我不得感慨一下


  見鬼的情況:在有網的情況下,分享之后,然后斷網分享的標題竟然不是默認的TITLE,而是之前從網絡獲取的分享標題。后來我苦思冥想,在成員位置明明初始化了,怎么沒有設置上默認的標題。

  問題解決:最終的問題還在于static關鍵字,static的生命周期。在有網的情況下分享成功之后TITLE被賦與了新值,而在TITLE所在的類(一個Popwindow)重新加載的時候,TITLE并不會隨著Popwindow的創建而創建,而是一直存在,一直保留著之前有網情況下分享的標題。


2.對于Adapter,如果它的數據源是靜態變量的,數據源變了,adapter不需要notifydatasetchanged就會改變adapter的ui.

  實際開發時的情景:Spinner加載數據

  關于靜態常量造成的那些見鬼的情況我不得感慨一下


  名師定制,是一個Fragment,Spinner的數據是通過一個叫做SpinnerData的類進行管理的,里面全部是靜態的變量和方法,在進入MainActivity里就通過getType()這個靜態方法來請求數據,請求成功之后會將數據解析給classObjects這個靜態的List。


  錯誤代碼1:在名師定制這個Fragment初始化的時候,

  

        classBeens.addAll(SpinnerData.classObjects);

  實際我在debug的時候,SpinnerData.classObjects是沒有真實的數據的。(在MainActivity里發起的異常請求還沒有成功的解析出數據)

   

  錯誤代碼2:作者以為SpinnerData里有數據,將數據賦值給函數的Spinner

initSpinner1(context, spinner1, SpinnerData.typeNames);
initSpinner2(context, spinner2, SpinnerData.GlassNames);

  這時我debug的時候SpinnerData.typeNames,SpinnerData.ClassNames仍然是沒有數據的。后面除了

左邊的Spinner點擊的時候會聯動右邊的Spinner,其它的沒有Spinner相關的數據請求操作。

  

  見鬼的情況:兩個Spinner竟然會有數據!!!!!!!!!!于是我猜想靜態數據綁定adapter是不是不需要notify?做了下面一個試驗,給adapter綁定靜態的數據源,在按鈕點擊時只改變靜態數據源,這時ListView竟然添加了新的數據!!!!!!!

  關于靜態常量造成的那些見鬼的情況我不得感慨一下  

  這就解釋了兩個Spinner怎么一開始設置的沒有數據的數據源竟然會顯示數據。

  同時還有另外一個bug:如果不點擊左邊的spinner,直接點擊右邊的spinner,崩潰報classBeans角標越界。還是Fragment一開始下面這行代碼的問題。

classBeens.addAll(SpinnerData.classObjects);

  因為在MainActivity里執行的SpinnerData的getType請求網絡的方法,無法知道它何時回調成功。于是在SpinnerData類里寫了個監聽器,監聽它的數據回調成功。

 關于靜態常量造成的那些見鬼的情況我不得感慨一下

  在Fragment里設置監聽:

  

@Override
public void initData() {
    //監聽數據源的變化,因為是異步調用的,我不知道數據什么時候發生了變化。
    SpinnerData.setOnDataChangedListener(this);

 ...}

 

 

@Override
public void onDataChanged() {
    classBeens.clear();
    classBeens.addAll(SpinnerData.classObjects);
}

 

3.接入Geesee直播平臺,將它的Player寫成單例之后出現的問題:

    第一次進入app可以正常播放,再次進入就無法正常播放。如果卸載app重裝第一次進入也能

 正常播放,后來想想應該是Player的生命周期太長了,緩存太多播放的狀態。

 所以單例,static也要慎用啊!


-------------------------------------------------------------------------------------

有時候越是這種見鬼的問題,越可能是我們對于一些概念并沒有真正的理解導致的。

  1. static

  2. 同步與異步




向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

额敏县| 绥德县| 永靖县| 贡觉县| 西城区| 尼玛县| 普格县| 巫溪县| 嘉兴市| 海兴县| 武定县| 泰州市| 兰州市| 开阳县| 遵化市| 余干县| 绥江县| 墨脱县| 望都县| 项城市| 卓尼县| 耿马| 张北县| 婺源县| 西峡县| 赤水市| 那曲县| 尼木县| 兴安县| 潮安县| 习水县| 潜山县| 绥滨县| 加查县| 云浮市| 长海县| 汉沽区| 永昌县| 尉氏县| 永清县| 桐柏县|