【问题标题】:Robospice service running until it finish it job after application finishedRobospice 服务一直运行,直到应用程序完成后完成它的工作
【发布时间】:2019-05-31 16:03:11
【问题描述】:

我有一个可以访问服务器的应用程序。当我退出应用程序时,我必须先断开与服务器的连接,然后再关闭应用程序。

我想知道是否有可能(以及如何)使 Robospice 服务(后台任务)断开与服务器的连接,即使应用程序已关闭(并且 Robospice 服务仍在运行以完成断开连接,然后之后自动杀死自己)。

问题是断线时间过长(有时超过5秒),我想避免在断线过程中阻塞手机,让用户使用它的手机。

另一个问题:Robospice 库是否会在未来得到维护和改进(如果需要)?

【问题讨论】:

    标签: android okhttp robospice


    【解决方案1】:

    是的,RoboSpice 在附加到服务上下文时与它与活动上下文一起工作时效果一样好。 但是您可能应该尝试在您的实现的com.octo.android.robospice.SpiceService#onDestroy 方法中执行断开连接。只要没有有意义的工作要做,该服务就会停止,所以我想这是最适合您的用例的解决方案。

    【讨论】:

      【解决方案2】:

      我通过使用 finish()

      结束我的应用程序,解决了我的问题(这可能不是真正的问题!)

      在我的 MainActivity 中,我使用 Robospice 服务:

      private final class LogoutListener implements PendingRequestListener<String> {
      
          @Override
          public void onRequestFailure(SpiceException spiceException) {
              Log.e(TAG, spiceException.getMessage());            
          }
      
          @Override
          public void onRequestSuccess(String result) {
              // nothing special
          }
      
          @Override
          public void onRequestNotFound() {
              Log.w(TAG, "Not found");
          }
      }
      
      private void Alarm_Logout(boolean exit) {
          Logout request = new Logout(url);
          spiceManager.execute(request, new LogoutListener());
          this.finish();
      }
      

      还有 Lougout 类:

      public class Logout extends OkHttpSpiceRequest<String> {
      
        private String url_logout;
      
        public Logout(String url) {
            super(String.class);
            this.url_logout = url;
        }
      
        @Override
        public String loadDataFromNetwork() throws Exception {
      
            OkHttpClient client = new OkHttpClient();
            Request request = new Request.Builder()
                    .url(url_logout)
                    .build();
            Response response = client.newCall(request).execute();
            return "ok";
      
        }
      
      }
      

      在我使用 onRequestSuccess 中的 System.exit(0) 关闭应用程序之前,我不得不等待注销完成。现在应用关闭(使用 finish()),但注销在后台继续,然后,完成后,服务完成...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        • 1970-01-01
        相关资源
        最近更新 更多