日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Android中實(shí)現(xiàn)用戶無感知處理后臺崩潰

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

公司主營業(yè)務(wù):成都網(wǎng)站建設(shè)、網(wǎng)站制作、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)建站是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊有機(jī)會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)建站推出溫江免費(fèi)做網(wǎng)站回饋大家。

當(dāng)你的用戶看到類似這樣的崩潰對話框時,心中得到“這屆程序員不行啊”的感慨也不足為奇。

在安卓中,我們應(yīng)用會有所謂的前臺和后臺的概念,在本文這里這樣定義,當(dāng)前應(yīng)用有Activity展示(即用戶明顯感知在當(dāng)前應(yīng)用),約定為前臺,否則為后臺。

如果在前臺時,發(fā)生崩潰用戶是明顯能感知的,但倘若發(fā)生在后臺,我們可以做一些簡單的小操作,讓用戶感知不到崩潰的發(fā)生(即不彈出崩潰的對話框)。

原理其實(shí)蠻簡單的。

  • 檢測是否為后臺
  • 如果是后臺則殺掉該進(jìn)程,否則執(zhí)行默認(rèn)的崩潰處理

檢測是否為后臺,這里我們以進(jìn)程中Activity的數(shù)量作為判斷標(biāo)準(zhǔn)

  • 當(dāng)activity onStart時activityCount自增
  • 當(dāng)Activity onStop時activityCount自減
  • 當(dāng)activityCount為0,我們則認(rèn)為應(yīng)用處于后臺狀態(tài)

具體實(shí)現(xiàn)如下: 

 
 
 
 
  1. object ActivityLifecycleCallbackImp: Application.ActivityLifecycleCallbacks { 
  2.    var activityCount: Int = 0 
  3.    override fun onActivityPaused(activity: Activity?) { 
  4.    } 
  5.  
  6.    override fun onActivityResumed(activity: Activity?) { 
  7.    } 
  8.  
  9.    override fun onActivityStarted(activity: Activity?) { 
  10.        activityCount ++ 
  11.    } 
  12.  
  13.    override fun onActivityDestroyed(activity: Activity?) { 
  14.    } 
  15.  
  16.    override fun onActivitySaveInstanceState(activity: Activity?, outState: Bundle?) { 
  17.    } 
  18.  
  19.    override fun onActivityStopped(activity: Activity?) { 
  20.        activityCount-- 
  21.    } 
  22.  
  23.    override fun onActivityCreated(activity: Activity?, savedInstanceState: Bundle?) { 
  24.    } 

在Application中進(jìn)行注冊: 

 
 
 
 
  1. class MyApplication : Application() { 
  2.    override fun onCreate() { 
  3.        super.onCreate() 
  4.        registerActivityLifecycleCallbacks(ActivityLifecycleCallbackImp) 
  5.    } 

剩下的就是設(shè)置一個自定義的未捕獲異常處理處理器: 

 
 
 
 
  1. val defaultHandler = Thread.getDefaultUncaughtExceptionHandler() 
  2. Thread.setDefaultUncaughtExceptionHandler { thread, exception -> 
  3.    exception.printStackTrace() 
  4.    val isBackground = ActivityLifecycleCallbackImp.activityCount == 0 
  5.    if (isBackground) { 
  6.        Log.d("MyApplication", "isBackground just kill the process without annoying users") 
  7.        android.os.Process.killProcess(android.os.Process.myPid()) 
  8.    } else { 
  9.        defaultHandler.uncaughtException(thread, exception) 
  10.    } 

至此功能就基本實(shí)現(xiàn)了,相對之前硬邦邦的對話框,后臺無干擾用戶的默默殺掉進(jìn)程要友好很多了。


新聞標(biāo)題:Android中實(shí)現(xiàn)用戶無感知處理后臺崩潰
文章源于:http://www.5511xx.com/article/dhohjed.html