成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Android中實現(xiàn)用戶無感知處理后臺崩潰

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

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

Android中實現(xiàn)用戶無感知處理后臺崩潰

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

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

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

原理其實蠻簡單的。

  • 檢測是否為后臺
  • 如果是后臺則殺掉該進(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)

具體實現(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.    } 

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

責(zé)任編輯:未麗燕 來源: 技術(shù)小黑屋
相關(guān)推薦

2022-09-28 12:39:46

axios攔截器

2009-12-23 10:46:38

WPF實現(xiàn)用戶界面

2009-12-30 09:45:52

Silverlight

2025-03-05 07:58:30

2010-01-28 10:00:54

linux用戶注銷logout

2012-05-04 09:28:49

Linux

2012-10-25 11:27:40

BYOD無感知認(rèn)證Portal認(rèn)證

2024-07-11 10:38:02

2010-08-04 10:48:17

路由器

2016-10-24 23:18:55

數(shù)據(jù)分析漏斗留存率

2015-05-28 18:52:32

斷網(wǎng)支付寶

2015-05-28 14:44:00

支付寶光纖被挖斷

2016-05-17 10:03:39

用戶體驗運維可度量

2018-05-30 10:22:47

電商平臺

2019-08-22 15:42:03

2025-03-28 04:10:00

2020-12-22 15:39:38

AI

2021-09-17 09:00:00

安全身份認(rèn)證OAuth 2.0

2024-09-22 10:46:33

數(shù)據(jù)飛輪算法

2014-07-22 14:48:05

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 免费观看色 | 国产一区二区三区四区区 | 国产一区二区毛片 | 亚洲97| 久久久久久亚洲精品 | a级免费黄色片 | 国产精品一区二区视频 | 国产成人精品免费视频大全最热 | 91精品国产日韩91久久久久久 | 精品国产欧美 | 久久精品伊人 | 久久久91精品国产一区二区三区 | 99pao成人国产永久免费视频 | 久久久久久免费看 | 精品亚洲一区二区三区四区五区高 | 成人精品一区二区 | 狠狠的干| 欧美一级淫片007 | 中国人pornoxxx麻豆 | 成人av播放 | 毛片软件| 天天操夜夜操免费视频 | 亚洲社区在线 | 9久9久9久女女女九九九一九 | 精品国产欧美 | 在线免费看黄 | 成人免费xxxxx在线视频 | 亚洲精品一区二区冲田杏梨 | 怡红院怡春院一级毛片 | 日日天天| 中文字幕av在线播放 | 天天草av| 精品一区二区三区在线视频 | 国产精品久久久久久福利一牛影视 | 国产精品美女一区二区 | 99国产精品久久久久久久 | 天天综合网天天综合 | 国产欧美视频一区 | 国产成人综合久久 | 91久久夜色 | 日韩精品一区二区三区久久 |