Android Service中错误处理的最佳实践

4

我有一个 Android 服务,使用单独的线程对图像进行一些后台处理。如果该服务或线程发生错误,最佳实践是如何通知启动该服务的 Activity 并允许应用程序恢复到稳定状态(即在启动服务之前的状态)。

我可以在服务内部发布 Toast 或 Notification,但这并不能帮助我。我想告知用户存在问题,同时使应用程序恢复到稳定状态。

2个回答

2
如果有人搜索这个,我将解释我最终所做的。在服务内部,我添加了一个扩展AsyncTask的私有类。这是所有处理都完成的地方。
在这个类中,我有一个私有变量'exception'。doInBackground方法的内容被try/catch包围,任何捕获的异常都存储在'exception'中。在onPostExecute方法中,我检查'exception'是否设置,如果是这种情况,我发送一个PROCESSING_ERROR广播,其中包含异常详细信息,以便通知调用活动。
如果您不知道AsyncTask、doInBackground或onPostExecute是什么,您应该阅读以下内容:

1
您可以使用一个 Messenger 在服务和主应用程序之间传递信息。
在您的主 Activity 中定义一个 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);

敬礼。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接