【问题标题】:Best practice for error handling in an Android ServiceAndroid 服务中错误处理的最佳实践
【发布时间】:2012-10-18 00:21:10
【问题描述】:

我有一个 Android 服务,它使用单独的线程对图像进行一些后台处理。如果这个Service出现错误,或者线程出现更糟的情况,最好的做法是通知启动Activity这个问题,让应用程序恢复到稳定状态(即启动服务之前的状态)。

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

【问题讨论】:

    标签: android exception error-handling android-service


    【解决方案1】:

    如果有人搜索这个,我会解释我最终做了什么。

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

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

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

    【讨论】:

      【解决方案2】:

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

      问候。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-12
        • 2017-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-11
        相关资源
        最近更新 更多