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

Android中實現用戶無感知處理后臺崩潰

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

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

Android中實現用戶無感知處理后臺崩潰

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

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

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

原理其實蠻簡單的。

  • 檢測是否為后臺
  • 如果是后臺則殺掉該進程,否則執行默認的崩潰處理

檢測是否為后臺,這里我們以進程中Activity的數量作為判斷標準

  • 當activity onStart時activityCount自增
  • 當Activity onStop時activityCount自減
  • 當activityCount為0,我們則認為應用處于后臺狀態

具體實現如下: 

  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中進行注冊: 

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

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

  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.    } 

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

責任編輯:未麗燕 來源: 技術小黑屋
相關推薦

2022-09-28 12:39:46

axios攔截器

2009-12-23 10:46:38

WPF實現用戶界面

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

2010-08-04 10:48:17

路由器

2012-10-25 11:27:40

BYOD無感知認證Portal認證

2024-07-11 10:38:02

2016-10-24 23:18:55

數據分析漏斗留存率

2015-05-28 18:52:32

斷網支付寶

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

2021-09-17 09:00:00

安全身份認證OAuth 2.0

2020-12-22 15:39:38

AI

2024-09-22 10:46:33

數據飛輪算法

2014-07-22 14:48:05

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区在线看 | 成人精品免费视频 | 古装三级在线播放 | 久久成人高清视频 | 亚洲精品久久久一区二区三区 | 精品一区二区久久久久久久网站 | 日韩中文字幕在线视频 | 一区二区三区在线观看免费视频 | 综合久久av | 亚洲欧洲一区 | 国产精品久久国产精品 | 久久精品一级 | 欧美www在线 | 91爱啪啪 | 日韩中文字幕 | 色毛片 | 日韩a | 久久一区二区三区四区五区 | 亚洲视频一区在线播放 | 欧美九九九 | 日本aaa视频| 欧美一级在线观看 | 99精品一区二区 | 天天操夜夜操 | 欧美影院 | 操亚洲 | 国产精品永久免费 | 国产精品日韩欧美一区二区三区 | 黑人一级黄色大片 | 中文字幕一区二区三区四区五区 | 草比网站| 欧美一区二区在线 | 四虎永久免费在线 | 国产精品久久国产精品99 | 中文字幕一区二区三区精彩视频 | 国产成人精品久久二区二区 | 精品国产色 | 97视频网站 | 久久久av| 91久久久久久久久久久久久 | 欧美电影大全 |