新聞中心
正所謂,要想沒有Bug,就一行代碼也不寫。App到了用戶的手里,肯定是崩潰越少越好。Android中的崩潰處理和iOS不太一樣,iOS崩潰通常是閃退,而安卓會出現(xiàn)如下的蹩腳的對話框。

公司主營業(yè)務:成都網(wǎng)站建設、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴謹、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出溫江免費做網(wǎng)站回饋大家。
當你的用戶看到類似這樣的崩潰對話框時,心中得到“這屆程序員不行啊”的感慨也不足為奇。
在安卓中,我們應用會有所謂的前臺和后臺的概念,在本文這里這樣定義,當前應用有Activity展示(即用戶明顯感知在當前應用),約定為前臺,否則為后臺。
如果在前臺時,發(fā)生崩潰用戶是明顯能感知的,但倘若發(fā)生在后臺,我們可以做一些簡單的小操作,讓用戶感知不到崩潰的發(fā)生(即不彈出崩潰的對話框)。
原理其實蠻簡單的。
- 檢測是否為后臺
- 如果是后臺則殺掉該進程,否則執(zhí)行默認的崩潰處理
檢測是否為后臺,這里我們以進程中Activity的數(shù)量作為判斷標準
- 當activity onStart時activityCount自增
- 當Activity onStop時activityCount自減
- 當activityCount為0,我們則認為應用處于后臺狀態(tài)
具體實現(xiàn)如下:
- object ActivityLifecycleCallbackImp: Application.ActivityLifecycleCallbacks {
- var activityCount: Int = 0
- override fun onActivityPaused(activity: Activity?) {
- }
- override fun onActivityResumed(activity: Activity?) {
- }
- override fun onActivityStarted(activity: Activity?) {
- activityCount ++
- }
- override fun onActivityDestroyed(activity: Activity?) {
- }
- override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) {
- }
- override fun onActivityStopped(activity: Activity?) {
- activityCount--
- }
- override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) {
- }
- }
在Application中進行注冊:
- class MyApplication : Application() {
- override fun onCreate() {
- super.onCreate()
- registerActivityLifecycleCallbacks(ActivityLifecycleCallbackImp)
- }
- }
剩下的就是設置一個自定義的未捕獲異常處理處理器:
- val defaultHandler = Thread.getDefaultUncaughtExceptionHandler()
- Thread.setDefaultUncaughtExceptionHandler { thread, exception ->
- exception.printStackTrace()
- val isBackground = ActivityLifecycleCallbackImp.activityCount == 0
- if (isBackground) {
- Log.d("MyApplication", "isBackground just kill the process without annoying users")
- android.os.Process.killProcess(android.os.Process.myPid())
- } else {
- defaultHandler.uncaughtException(thread, exception)
- }
- }
至此功能就基本實現(xiàn)了,相對之前硬邦邦的對話框,后臺無干擾用戶的默默殺掉進程要友好很多了。
網(wǎng)站欄目:Android中實現(xiàn)用戶無感知處理后臺崩潰
當前地址:http://m.fisionsoft.com.cn/article/dhohjed.html


咨詢
建站咨詢
