【问题标题】: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()),但注销在后台继续,然后,完成后,服务完成...