正所谓,要想没有bug,就一行代码也不写。App到了用户的手里,肯定是崩溃越少越好。Android中的崩溃处理和iOS不太一样,iOS崩溃通常是闪退,而安卓会出现如下的蹩脚的对话框。
当你的用户看到类似这样的崩溃对话框时,心中得到“这届程序员不行啊”的感慨也不足为奇。
在安卓中,我们应用会有所谓的前台和后台的概念,在本文这里这样定义,当前应用有Activity展示(即用户明显感知在当前应用),约定为前台,否则为后台。
如果在前台时,发生崩溃用户是明显能感知的,但倘若发生在后台,我们可以做一些简单的小操作,让用户感知不到崩溃的发生(即不弹出崩溃的对话框)。
原理其实蛮简单的。
检测是否为后台,这里我们以进程中Activity的数量作为判断标准
具体实现如下:
- 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)
- }
- }
至此功能就基本实现了,相对之前硬邦邦的对话框,后台无干扰用户的默默杀掉进程要友好很多了。
生物识别技术,是利用人体固有的生理特征,如指纹,脸象,虹膜等和人类的行为特...
人工智能,高高在上,相信这是很多人的想法。其实我们每个人天天都在使用人工智...
波士顿动力创始人 Marc Raibert 表示,Spot 机器狗有朝一日将「可供家庭使用」。...
过年少了点年味儿,是一个春节的老话题了。为此,网友们开始争当春节气氛组,打...
根据Gartner最近的一项调查显示,自疫情爆发以来,有47%的企业组织在人工智能(AI...
双十一刚过去不久,双十二剁手季又已经到来。在2020年最后一个购物节,想必很多...
关于你的一切,正在以各种各样的形式大白于天下。 3月15日晚间,央视315晚会曝光...
当前5G已在全球规模商用,推动了行业数字化转型。但我们认识到,面向未来十年,...
企业并没有充分利用人工智能和机器学习。 毫无疑问,人工智能(AI)和机器学习(ML)...
针对之前工信部的公布《关于侵害用户权益行为的APP(第一批)通报》,今天腾讯方...