Android服务中错误处理的最佳实践

Android服务中错误处理的最佳实践,android,exception,error-handling,android-service,Android,Exception,Error Handling,Android Service,我有一个Android服务,它使用一个单独的线程对图像进行后台处理。如果此服务中出现错误,或者线程中出现更严重的错误,那么将问题通知启动活动并允许应用程序恢复到稳定状态(即启动服务之前的状态)的最佳做法是什么 在服务中,我可以发布祝酒词或通知,但这对我没有帮助。我希望将问题告知用户,但同时将应用程序恢复到稳定状态。您可以使用Messenger在服务和主应用程序之间传递信息 在主要活动中定义messenger,如下所示: private Messenger = mMessengerCliente

我有一个Android服务,它使用一个单独的线程对图像进行后台处理。如果此服务中出现错误,或者线程中出现更严重的错误,那么将问题通知启动活动并允许应用程序恢复到稳定状态(即启动服务之前的状态)的最佳做法是什么


在服务中,我可以发布祝酒词或通知,但这对我没有帮助。我希望将问题告知用户,但同时将应用程序恢复到稳定状态。

您可以使用
Messenger
在服务和主应用程序之间传递信息

在主要活动中定义messenger,如下所示:

private Messenger = mMessengerCliente = new Messenger(new IncomingHandler());

/**
 * Handler of incoming messages from service.
 */
private class IncomingHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
            case MSG_1:
                //actions to perform on message type 1
                break;
            case MSG_2:
                //actions to perform on message type 2
                break;
            default:
                super.handleMessage(msg);
        }
    }
}
Messenger
对象作为
Extra
传递或绑定到您的服务时传递

在您的服务中,恢复
Messenger
对象并使用它进行通信:

                mMsgClientMain = (Messenger)intent.getExtras().get(EXTRA_MESSENGER);

                Message msg = Message.obtain(null, MSG_1, arg1, arg2);
                msg.replyTo=reply_to; // if you need to have bidirectional communication, pass here the service messenger object
                mMsgClientMain.send(msg);

问候。

如果有人搜索此信息,我将解释我最终做了什么

在服务内部,我添加了一个私有类,该类扩展了AsyncTask。这是所有的处理都完成了

在这个类中,我有一个私有变量“exception”。doInBackground方法的内容由try/catch包围,捕获的任何异常都存储在“exception”中。在onPostExecute方法中,我检查是否设置了“异常”,如果是这种情况,我将发送一个广播处理错误和异常详细信息,以便通知调用活动

如果您不知道什么是AsyncTaskdoInBackgroundonPostExecute,您应该阅读以下内容: