最近公司有新的業務需求,需要開發一款APP,因為我開發過Android APP(我想告訴他們,那是4年前的事了,嚶嚶嚶),就把開發任務交給我了,當然也不是我一個人啦,讓我組開發小組,說白了,就是讓我來負責技術指導和框架搭建。我,能怎么辦,只能硬着頭皮寫啊。確實有點兒手生了,所以中間還是遇到一些問題,下面記錄一下吧。
1,日志的收集
日志記錄是一個常見的需求,對開發和測試都很重要,有很多開源的日志工具,也可以自己開發,這里我選的是一個開源的工具。
歡迎使用:TLog
2,子線程調用Toast報Can't create handler inside thread that has not called Looper.prepare() 錯誤
這是一種典型的線程搞錯了的問題。UI線程即主線程才能做UI相關的操作,網絡線程里不能操作UI,如果要操作就需要使用Looper.prepare(), Looper.loop()了,但是如果在UI線程使用Looper.prepare()話,就會報上面的錯誤,app會停止。
問題的難點在於怎么區分UI線程和網絡線程,很簡單,在網絡請求的回調里的,就是網絡線程,其他的就是UI線程。
3,Only the original thread that created a view hierarchy can touch its views的問題
原因:Android系統中的視圖組件並不是線程安全的,如果要更新視圖,必須在主線程(UI線程)中更新,不可以在子線程(網絡線程,耗時的線程)中執行更新的操作。需要通過Handler去通知主線程更新UI。
4,Cleartext HTTP traffic to xxx not permitted的問題
原因:Google表示,為保證用戶數據和設備的安全,針對下一代 Android 系統(Android P) 的應用程序,將要求默認使用加密連接,這意味着 Android P 將禁止 App 使用所有未加密的連接,因此運行 Android P 系統的安卓設備無論是接收或者發送流量,未來都不能明碼傳輸,需要使用下一代(Transport Layer Security)傳輸層安全協議,而 Android Nougat 和 Oreo 則不受影響。此在Android P 使用HttpUrlConnection進行http請求會出現以下異常java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy在Android P系統的設備上,如果應用使用的是非加密的明文流量的http網絡請求,則會導致該應用無法進行網絡請求,https則不會受影響,同樣地,如果應用嵌套了webview,webview也只能使用https請求。
解決方法:在AndroidManifest.xml文件中配置
<application
android:name=".MesApplication"
android:allowBackup="true"
android:icon="@drawable/logo"
android:label="@string/app_name"
android:roundIcon="@drawable/logo"
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:usesCleartextTraffic="true">
</application>
碼字不易,如果覺得有幫助,一定要給我點贊喲~~
不然信不信我砸了你家燈,半夜偷親你 ( ̄ε  ̄) !!!