Android 冷門問題記錄(20.1.15)

  1. 操作文件流時,可以使用Java7中引入的語法糖,try-with-resources,優化需要關閉文件流時產生的大段try catch finally 代碼.
    另外對於try中和finally中同時有return時,先保存try中return中值,再處理finally,最後return 的還是try中值,不受finally中影響https://blog.csdn.net/xiangyuenacha/article/details/84234797

  2. 使用監聽器或回調時要注意,如果使用匿名內部類的方式創建監聽器,可能會因爲被系統回收而導致無法接收到回調信息。

  3. 在使用AlarmManager時,通過PendingIntent傳遞 Parcelable 對象時,會出現取不到數據的現象。此時可以考慮用Bundle來保存Parcelable,再將Bundle傳遞給PendingIntent,即可正常傳遞。
    參見:https://blog.csdn.net/m190607070/article/details/78492887
    https://blog.csdn.net/z2421309246/article/details/79454716

  4. 使用.9圖時,如果需要它的拉伸效果,需要將其設爲imageview的background。直接設爲src的話,沒有拉伸效果。如果必須設爲src,比如使用glide或picasso時,設置placeholder佔位圖時,內部會設置爲src,需要配套使用scaleType 爲fitXY時,纔有拉伸效果。或者採用鏈接所示方法

  5. 添加動畫監聽事件時,直接使用的AnimatorListener的話,則需要實現onAnimationStart,onAnimationEnd,onAnimationRepeat多個方法。此時可以使用AnimatorListenerAdapter,只需要重寫需要用到的方法即可,其他默認爲空。

  6. adb模擬手機電量。讓手機電量顯示百分百: adb shell dumpsys battery set level 100 使用adb命令查看電池電量信息

  7. 使用isShown()獲取View的可見性。獲取view可見性時,平時都是採用getVisibility方法,來判斷是否爲Visible。最近遇到個情景,一個view被父控件包含,平時只設置父控件爲Invisible或Visible,現在爲子控件添加了個功能,當子控件可見時,啓用功能,不可見時測不啓用該功能。此時光判斷子控件的可見性是不夠的,因爲父控件被設爲Invisible時,子控件也是不可見的,但是此時子控件調用getVisibility依然返回Visible。可以分別判斷其父控件與子控件getVisibility方法,但是還有另外更好的方法。使用isShown()方法,只有當該view以及該view所有parent都VISIBLE時,才返回trueAndroid View的可見性檢查方法

  8. 關於sharedPreference中,apply() 跟 commit() 不一樣的地方是,它使用的是異步而不是同步,它會立即將更改提交到內存,然後異步提交到硬盤,並且如果失敗將沒有任何提示。注意:apply雖然開了子線程處理 但是activity退出時會等待寫入完成 也可能造成anr,最保險的方式自己開啓子線程來進行commit操作

  9. 注意:如果設備上沒有可接收隱式 Intent 的應用,您的應用將在調用 startActivity() 時崩潰。如需事先驗證是否存在可接收 Intent 的應用,請對 Intent 對象調用 resolveActivity()。如果結果爲非空,則至少有一個應用能夠處理該 Intent,並且可以安全調用 startActivity()。 如果結果爲空,則您不應使用該 Intent。如有可能,您應停用調用該 Intent 的功能。官方SDK

  10. 無障礙模式,某些控件不想被識別出來
    原因:爲了適配無障礙模式,要求開啓talkback與語音播報後,選中的部分都需要有語音提示。但是由於某些佈局並未有作用,比如作爲分割線等,被識別時會造成困擾,也不知道如何描述。
    解決方法:對於可以描述的控件,比如菜單按鈕,通過添加android:contentDescription 標籤,進行描述。對於不想被識別出的控件,通過添加 android:importantForAccessibility 標籤,來描述是否需要被識別。
    https://developer.android.com/reference/android/view/View.html#attr_android:importantForAccessibility

  11. 國際化時,對應語言沒有根據RTL來排列
    原因:此種情況會出現在多語言混合排列的情況。比如 波斯語 採用 RTL ,英語採用LTR,這兩種語言混合在一起,可能就會出現LTR的排列結果。
    解決方法:可以通過 僞強字符 來解決,比如上述例子中,在字符串前加入 僞強字符 即可改變排列。
    https://segmentfault.com/a/1190000003781294
    https://www.ibm.com/developerworks/cn/java/j-lo-bidi/index.html?ca=dat-cn-0311

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