日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android app无感知自动升级,Android中实现用户无感知处理后台崩溃

發(fā)布時間:2024/1/23 Android 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android app无感知自动升级,Android中实现用户无感知处理后台崩溃 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

image.png

當(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)如下

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中進(jìn)行注冊

class MyApplication : Application() {

override fun onCreate() {

super.onCreate()

registerActivityLifecycleCallbacks(ActivityLifecycleCallbackImp)

}

}

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

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)

}

}

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

喜歡點(diǎn)擊+關(guān)注哦

總結(jié)

以上是生活随笔為你收集整理的android app无感知自动升级,Android中实现用户无感知处理后台崩溃的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。