全局捕获异常并更改活动

时间:2018-08-09 13:30:48

标签: android rx-java2

我有一个使用API​​的应用。对于每个请求,我都会发送带有应用程序版本的标头,服务器会对其进行检查,如果版本太低,则会引发错误。我这样做是为了这样,以便将来在我引入重大更改时,我可以在应用程序上显示一个不错的消息,而不仅仅是崩溃

现在,整个应用程序中的任何请求都可能会返回此错误,因此,我想做的是在每个请求中全局捕获此错误,然后关闭打开的任何活动,然后打开一个新活动,并说一些好消息,例如“请去商店更新您的应用”。

有可能这样做吗?

回顾一下,我想做两件事:

  1. 从任何请求,通过OkHttp / Retrofit生成ObsoleteAppException

  2. 仅全局捕获此异常,关闭任何活动并打开新的警告警告

如果有用的话,我正在使用RxJava2和改造

2 个答案:

答案 0 :(得分:0)

在您的Thread.setDefaultUncaughtExceptionHandler类中使用Application来捕获应用程序中的所有异常,并检查应用程序是否应崩溃或显示更新消息。

本文Hide your crashes gracefully (and still report them)和其他许多libraries可以帮助您“在Android中全局捕获异常”。

关于更改当前活动,已经有答案here。它基本上跟踪每个活动。当您需要更改当前活动时,只需完成当前活动并开始新的活动即可。

对于您的情况,整个方法似乎有些过大,但是我没有更好的主意...也许是自定义RxJava异常处理程序来捕获此异常?

答案 1 :(得分:0)

您可以使用UCE Handler来捕获异常,并向用户提供有关如何处理异常的选项。

在项目的build.gradle文件中:

allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}

在应用程序或模块的build.gradle文件中:

dependencies {
    compile 'com.github.jampez77:UCE-Handler:uce_handler:1.4.1'
}

在您的Application类中,使用构建器模式初始化库:

public class MyApplication extends Application {
    @Override 
    public void onCreate() { 
        ...
        // Initialize UCE_Handler Library
        new UCEHandler.Builder(this).build();
    }
}

然后确保您按照以下方式更新清单:

<application
    android:name=".MyApplication"