为什么在意图服务启动后立即调用 onDestroy()



我知道意图服务在工作完成后立即结束。我正在 onHandleIntent(( 上进行网络调用。服务在启动后立即死亡,但网络调用成功完成。

是因为调用了所有网络调用的方法,并且它们 存在于不同的线程中?那么,服务死了?

@Override
protected void onHandleIntent(@Nullable Intent intent) {
    Log.i(TAG, "Download Service Started!");
    initVariables();
    startDownloadService(intent);
}
private void startDownloadService(Intent intent) {
    receiver = intent.getParcelableExtra("receiver");
    notifyDownloadRunning("Trying to start Download");
    getNews();
    getVideoDetails();
    .................
}

改装接口

@GET()
Observable<VideoDetailsRoot> getVideoDetails(@Url String url);

您正在处理线程两次。一次使用IntentService,一次使用Retrofit和Rx。

订阅 Observable 时,您不会阻止当前线程(大多数情况下(,而是异步等待结果。

在您的情况下,您可以凭良心跳过IntentService的实施。Retrofit 和 Rx 为您提供了足够的功能来处理异步下载,而不会阻塞主线程。

如果要保留服务,则需要使网络部分同步或等待订阅完成。但其中任何一个都可能是对Retrofit本身的误用。

最新更新