iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android异常处理最佳实践
  • 474
分享到

Android异常处理最佳实践

Android 2022-06-06 08:06:46 474人浏览 泡泡鱼
摘要

一个好的app 异常处理机制 我认为应该至少包含以下几个功能: 1.能把错误信息上传到服务器  让开发者可以持续改进app 2.错误信息至少应该包含 是否在主进程 是

一个好的app 异常处理机制 我认为应该至少包含以下几个功能:

1.能把错误信息上传到服务器  让开发者可以持续改进app

2.错误信息至少应该包含 是否在主进程 是否在主线程 等可以帮助程序员定位的信息

3.最好包含手机硬件及软件信息。

4.主进程引发的异常 最好交由系统自己处理 也就是让用户可以感知到 那种(当然你也可以自己定义一套更有意思的感知系统对话框等,具体可参考各种有意思的404界面)

5.子进程引发的异常最好别让用户感知到。比如push之类的 这种 和用户感知弱关联的这种。最好发生异常就直接kill掉即可。不要再交给系统处理。 

下面上代码。


package com.example.administrator.exceptiontest;
import Android.app.ActivityManager;
import android.app.Application;
import android.content.Context;

public class BaseApplication extends Application {
  public static Context mContext;
  //默认的异常处理
  public static Thread.UncaughtExceptionHandler defaultUncaughtExceptionHandler;
  @Override
  public void onCreate() {
    super.onCreate();
    mContext = this;
    //先取得默认的异常处理handler
    defaultUncaughtExceptionHandler = Thread.getDefaultUncaughtExceptionHandler();
    Thread.setDefaultUncaughtExceptionHandler(new BaseUncaughtExceptionHandler());
  }
}

package com.example.administrator.exceptiontest;
import android.app.ActivityManager;
import android.content.Context;
import android.os.Looper;

public class Utils {
  
  public static boolean isInMainThread() {
    //注意这个地方 我们无法一定可以取得myLooper的值的 比如说 你的thread 没有绑定消息循环
    //那你的mylooper就返回的一定是null了,只有绑定了以后才会返回相应的值
    return Looper.myLooper() == Looper.getMainLooper();
  }
  //判断是否是主进程 如果是 就返回true 否则返回false
  public static boolean isMainProcess(Context context)
  {
    return context.getPackageName().equals(getProcessName(context));
  }
  //取得进程名
  public static String getProcessName(Context context) {
    String currentProcessName = "";
    int pid = android.os.Process.myPid();
    ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    for (ActivityManager.RunningAppProcessInfo processInfo : manager.getRunningAppProcesses()) {
      if (processInfo.pid == pid) {
        currentProcessName = processInfo.processName;
        break;
      }
    }
    return currentProcessName;
  }
}

package com.example.administrator.exceptiontest;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;

public class BaseUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler {
  @Override
  public void uncaughtException(Thread thread, Throwable ex) {
    Writer resultWriter = new StringWriter();
    PrintWriter printWriter = new PrintWriter(resultWriter);
    ex.printStackTrace(printWriter);
    StringBuffer sb = new StringBuffer();
    sb.append("是否在主线程中发生异常" + Utils.isInMainThread() + "\n");
    sb.append("是否在主进程中发生异常" + Utils.isMainProcess(BaseApplication.mContext) + "\n");
    String errorReport = sb.toString() + resultWriter.toString();
    //这个地方最好把收集到的错误信息日志 上传至服务器 便于开发者定位修改问题。
    //如果是主进程发生了异常 那还是交给系统自己默认的异常处理来做。让用户感知到,否则用户啥都不知道 体验并不好
    //你当然也可以自己定义特殊的错误提示 比如一些有意思的dialog什么的
    if (Utils.isMainProcess(BaseApplication.mContext)) {
      BaseApplication.defaultUncaughtExceptionHandler.uncaughtException(thread, ex);
    } else {
      //如果是子进程发生异常 不要给提示 直接殺掉子進程最好 別讓用戶感知到
      android.os.Process.killProcess(android.os.Process.myPid());
    }
  }
}
您可能感兴趣的文章:Android崩溃异常捕获方法详解Android全局异常的捕获处理AndroidStudio 使用过程中出现的异常(Gradle sync failed)处理办法详解Android中处理崩溃异常Android中捕获全局异常实现代码Android开发使用UncaughtExceptionHandler捕获全局异常Android实现捕获未知异常并提交给服务器的方法Android ListView出现异常解决办法android 捕捉异常并上传至服务器的简单实现


--结束END--

本文标题: Android异常处理最佳实践

本文链接: https://www.lsjlt.com/news/25370.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android异常处理最佳实践
    一个好的app 异常处理机制 我认为应该至少包含以下几个功能: 1.能把错误信息上传到服务器  让开发者可以持续改进app 2.错误信息至少应该包含 是否在主进程 是...
    99+
    2022-06-06
    Android
  • Kotlin Android中错误及异常处理最佳实践
    Kotlin Android中错误及异常处理最佳实践 Kotlin在Android开发中的错误处理机制以及其优势 Kotlin具有强大的错误处理功能:Kotlin提供了强大的错误处理功能,使处理错...
    99+
    2023-10-08
    android kotlin 开发语言
  • Java编程异常处理最佳实践【推荐】
    Java中的异常处理不是一个简单的话题。初学者很难理解,甚至有经验的开发人员也会花几个小时来讨论应该如何抛出或处理这些异常。这就是为什么大多数开发团队都有自己的异常处理的规则和方法。如果你是一个团队的新手,你可能会惊讶于这些方法与你之前使用...
    99+
    2023-05-30
    java 异常处理机制 ava
  • Python中的异常处理的最佳实践是什么?
    Python中的异常处理的最佳实践是什么?异常处理是计算机编程中一项非常重要的技术,它可以帮助我们预防和处理程序运行时出现的错误和异常情况。在Python中,异常处理是通过try-except语句来实现的。在本文中,我们将讨论一些Pytho...
    99+
    2023-10-22
    Python 最佳实践 异常处理
  • Go中的错误和异常处理最佳实践方法
    目录错误认识错误自定义错误实现原理异常认识异常处理异常异常处理原则异常处理实践错误 认识错误 在Go中,错误是一种表示程序错误状态。包含了在程序在运行时、编译时的状态信息。一般我们在...
    99+
    2022-11-11
  • NodeJS 错误处理最佳实践
    NodeJS 是一种基于事件驱动、异步 I/O 的开放源代码服务器端 JavaScript 运行时环境。它的高效性和可扩展性使得 NodeJS 成为了许多企业级 Web 应用的首选技术。然而,像所有其他软件一样,NodeJS 应用程序也无法...
    99+
    2023-05-14
  • Python中的异常处理的最佳实践和错误处理策略是什么?
    Python中的异常处理的最佳实践和错误处理策略是什么?异常处理是一种重要的编程技巧,可以帮助我们优雅地处理程序中的错误。在Python中,异常是指在程序执行过程中出现的错误、意外或异常情况。当出现异常时,Python会抛出一个异常对象,我...
    99+
    2023-10-22
    最佳实践 异常处理 错误处理策略
  • Python开发注意事项:处理异常和错误的最佳实践
    Python是一种易于学习的编程语言,有很多开发者喜欢使用它来构建各种应用程序。但是在开发过程中,错误和异常处理是非常关键的,这也是最基本的编程规范之一。在本文中,我们将分享一些Python开发中处理异常和错误的最佳实践。一、了解异常异常是...
    99+
    2023-11-23
    错误处理 最佳实践 异常处理
  • Android夜间模式最佳实践
    由于Android的设置中并没有夜间模式的选项,对于喜欢睡前玩手机的用户,只能简单的调节手机屏幕亮度来改善体验。目前越来越多的应用开始把夜间模式加到自家应用中,没准不久goog...
    99+
    2022-06-06
    Android
  • 同步还是异步?Java和Django并发处理的最佳实践
    随着互联网的发展,高并发成为了许多应用程序的必备特性。在这样的情况下,如何有效地处理并发请求成为了一个需要被解决的问题。Java和Django作为两种常用的编程语言,都有着自己的并发处理方式。那么,这两种语言的并发处理方式有什么区别呢?本...
    99+
    2023-09-10
    django 同步 并发
  • 实时数据处理:Python和Javascript的最佳实践
    实时数据处理是现代互联网应用中非常重要的一部分,Python和Javascript是两种非常流行的编程语言,可以用来实现实时数据处理的应用。在本文中,我们将介绍Python和Javascript的最佳实践,以帮助开发者更好地处理实时数据。 ...
    99+
    2023-06-26
    实时 javascript apache
  • 异步编程与大数据处理:Python 教程中的最佳实践
    在大数据处理中,异步编程是一种非常重要的技术。与传统的同步编程相比,异步编程可以大大提高程序的性能和效率。Python 语言也提供了异步编程的支持。在本文中,我们将介绍 Python 中的异步编程,以及如何使用它来处理大数据。 一、Pyt...
    99+
    2023-09-29
    教程 大数据 异步编程
  • TiDB 异构数据库复制最佳实践
    作者简介:秦天爽,PingCAP 解决方案事业部架构总监。 纵观现有业务系统的分布式改造,其中一个难点在于数据库的迁移: 迁移使用全量还是增量? 在线还是离线? 使用现成的工具还是开发作业? …… 用户往往面对多种选择。下面将为大家...
    99+
    2017-04-16
    TiDB 异构数据库复制最佳实践
  • Python 异步编程的未来:大数据处理应用的最佳实践
    随着大数据技术的不断发展,越来越多的应用场景需要高效的数据处理能力。Python 作为一门高级编程语言,一直在大数据处理领域中扮演着重要的角色。而异步编程作为 Python 中的一种高级编程技术,更是在大数据处理中发挥了重要作用。 异步编...
    99+
    2023-09-29
    教程 大数据 异步编程
  • Java编程的最佳实践:如何处理文件?
    Java是一种广泛使用的编程语言,被广泛应用于企业级应用、游戏开发、移动应用程序等领域。在Java编程中,文件处理是一个非常重要的主题。在本文中,我们将分享Java编程的最佳实践,以便更好地处理文件。 使用java.nio.file.P...
    99+
    2023-11-04
    文件 编程算法 对象
  • Golang RabbitMQ: 实现大规模消息处理的最佳实践
    以下是使用Golang和RabbitMQ实现大规模消息处理的最佳实践:1. 使用连接池:在处理大量消息时,使用连接池可以提高性能。连...
    99+
    2023-10-20
    Golang
  • 处理大数据日志:PHP和Linux的最佳实践
    随着互联网的飞速发展,数据量的增长速度也在加快。大量的数据需要存储和处理,而日志数据是其中的一种。处理日志数据是一个非常重要的任务,因为它可以帮助企业了解其业务运营情况,发现问题并做出相应的决策。本文将介绍如何使用PHP和Linux来处理...
    99+
    2023-09-10
    linux 日志 大数据
  • PHP和NumPy:异步编程的最佳实践方法。
    PHP和NumPy:异步编程的最佳实践方法 随着互联网的发展,网站的复杂程度也在不断提高。为了应对高并发的访问量和处理大量的数据,异步编程成为了一种必不可少的技术。而PHP作为一门广泛应用于Web开发的语言,其异步编程的实现方式也备受关注。...
    99+
    2023-10-05
    numpy 异步编程 文件
  • Linux环境下Java异步编程的最佳实践?
    在Linux环境下,Java异步编程是一个非常重要的领域。异步编程可以提高Java程序的效率和响应能力,让程序能够更好地处理高并发和大量请求。本文将介绍Linux环境下Java异步编程的最佳实践,同时会穿插一些代码演示。 一、Java异步编...
    99+
    2023-10-15
    分布式 linux 异步编程
  • Linux数组和PHP:异步编程的最佳实践
    在现代编程世界中,异步编程已经变得越来越普遍,因为它可以大大提高代码的性能和可扩展性。异步编程使程序能够执行多个任务,而不必等待每个任务都完成。Linux数组和PHP是两个非常强大的工具,可以帮助我们实现异步编程的最佳实践。 Linux数...
    99+
    2023-09-20
    linux 数组 异步编程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作