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

时间:2012-10-28 12:42:32

标签: android exception error-handling android-service

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

从服务中我可以发布Toast或Notification,但这对我没有帮助。我想告知用户有关该问题的信息,但同时将应用程序恢复到稳定状态。

2 个答案:

答案 0 :(得分:1)

您可以使用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);

问候。

答案 1 :(得分:1)

如果有人搜索这个,我会解释我最终做的事情。

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

在这个课程中,我有一个私有变量'exception'。 doInBackground 方法的内容由try / catch包围,任何捕获的异常都存储在“exception”中。在 onPostExecute 方法中,我检查是否设置了'exception',如果是这种情况,我会发送带有异常详细信息的广播 PROCESSING_ERROR,以便通知调用Activity。

如果您不知道 AsyncTask doInBackground onPostExecute ,您应阅读以下内容: