最近公司有新的業(yè)務(wù)需求,需要開發(fā)一款A(yù)PP烧颖,因?yàn)槲议_發(fā)過Android APP(我想告訴他們弱左,那是4年前的事了,嚶嚶嚶)炕淮,就把開發(fā)任務(wù)交給我了,當(dāng)然也不是我一個(gè)人啦跳夭,讓我組開發(fā)小組涂圆,說白了们镜,就是讓我來負(fù)責(zé)技術(shù)指導(dǎo)和框架搭建。我润歉,能怎么辦模狭,只能硬著頭皮寫啊。確實(shí)有點(diǎn)兒手生了踩衩,所以中間還是遇到一些問題嚼鹉,下面記錄一下吧。
1驱富,日志的收集
日志記錄是一個(gè)常見的需求锚赤,對開發(fā)和測試都很重要,有很多開源的日志工具褐鸥,也可以自己開發(fā)线脚,這里我選的是一個(gè)開源的工具。
歡迎使用:TLog
2叫榕,子線程調(diào)用Toast報(bào)Can't create handler inside thread that has not called Looper.prepare() 錯(cuò)誤
這是一種典型的線程搞錯(cuò)了的問題浑侥。UI線程即主線程才能做UI相關(guān)的操作,網(wǎng)絡(luò)線程里不能操作UI晰绎,如果要操作就需要使用Looper.prepare()寓落, Looper.loop()了,但是如果在UI線程使用Looper.prepare()話荞下,就會報(bào)上面的錯(cuò)誤伶选,app會停止。
問題的難點(diǎn)在于怎么區(qū)分UI線程和網(wǎng)絡(luò)線程锄弱,很簡單考蕾,在網(wǎng)絡(luò)請求的回調(diào)里的,就是網(wǎng)絡(luò)線程会宪,其他的就是UI線程肖卧。
3,Only the original thread that created a view hierarchy can touch its views的問題
原因:Android系統(tǒng)中的視圖組件并不是線程安全的掸鹅,如果要更新視圖塞帐,必須在主線程(UI線程)中更新,不可以在子線程(網(wǎng)絡(luò)線程巍沙,耗時(shí)的線程)中執(zhí)行更新的操作葵姥。需要通過Handler去通知主線程更新UI。
4句携,Cleartext HTTP traffic to xxx not permitted的問題
原因:Google表示榔幸,為保證用戶數(shù)據(jù)和設(shè)備的安全,針對下一代 Android 系統(tǒng)(Android P) 的應(yīng)用程序,將要求默認(rèn)使用加密連接削咆,這意味著 Android P 將禁止 App 使用所有未加密的連接牍疏,因此運(yùn)行 Android P 系統(tǒng)的安卓設(shè)備無論是接收或者發(fā)送流量,未來都不能明碼傳輸拨齐,需要使用下一代(Transport Layer Security)傳輸層安全協(xié)議鳞陨,而 Android Nougat 和 Oreo 則不受影響。此在Android P 使用HttpUrlConnection進(jìn)行http請求會出現(xiàn)以下異常java.net.UnknownServiceException: CLEARTEXT communication ** not permitted by network security policy在Android P系統(tǒng)的設(shè)備上瞻惋,如果應(yīng)用使用的是非加密的明文流量的http網(wǎng)絡(luò)請求厦滤,則會導(dǎo)致該應(yīng)用無法進(jìn)行網(wǎng)絡(luò)請求,https則不會受影響歼狼,同樣地掏导,如果應(yīng)用嵌套了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>
碼字不易碘菜,如果覺得有幫助,一定要給我點(diǎn)贊喲~~
不然信不信我砸了你家燈限寞,半夜偷親你 ( ̄ε  ̄) !!!