gpt4 book ai didi

android - 如何从 Activity 中停止在另一个进程中启动的 Intent 服务

转载 作者:行者123 更新时间:2023-11-30 01:46:10 24 4
gpt4 key购买 nike

我已经制作了一个 Intent 服务并且它按预期工作,而且我知道 Intent 服务可以正常工作并在工作后自行停止,因此不需要停止它。我已经做了我的 Intent 服务,你可以用谷歌搜索它,但我是在一个单独的过程中启动它的。代码在 xml 中是这样的

android:process=":MYPROCESS"

所以在我的应用程序中,我通过以下方式在按钮点击时启动了 Intent 服务

Intent intent = new Intent(DownloadService.ALARM_SERVICE);
intent.setClass(this,DownloadService.class);

/* Send optional extras to Download IntentService */
intent.putExtra("url", "http://myurl.com");
intent.putExtra("receiver", mReceiver);
intent.putExtra("requestId", 101);

startService(intent);

这只是为了让您了解我是如何开始的,这很正常。

发生了什么

我做了一个停止服务的按钮,我的这个服务正在下载一些东西。所以我做了什么,我终止了进程,但再次启动了服务。

因为我希望我的服务在被系统杀死或应用程序被杀死时重新启动,所以我设置了重新交付的 Intent ,如下所示

setIntentRedelivery(true);

所以这是惊人的情况:所以简化我的问题如下

我想停止服务以不再启动,但是当它被系统杀死或者当用户从最近的应用程序中删除应用程序时它被杀死,然后服务应该重新启动(这很好)。

请告诉我怎样才能做到这一点。

最佳答案

为此,您必须进一步修改从 IntentService 派生的自定义 DownloadServiceIntentService 基类会自动启动一个线程并在那里为您的 Intent 提供服务,并在没有更多工作要做时关闭线程和服务。您有 2 个选择可以用来停止服务:

  1. 在您的服务中实现 onStop() 并设置一个内部(同步)shutdown bool 值。在您的 onHandleIntent() 中,您可以检查此标志并提前退出处理程序,并可能调用 stopSelf() 以提前退出。

  2. 或者,您可以添加自己的 onBind() 实现,并让您的 Activity 与服务绑定(bind)。然后公开一个 Binder 方法(请参阅 AIDL 上的文档)以在您要退出服务时由您的 Activity 调用。像上面一样,您的服务的 onHandleIntent() 将需要监视此提前退出类型标志并导致自身过早停止。

请注意,在任何一种情况下,服务的进程很可能不会被终止,这是正常的。 Android 将进程保持在缓存状态并处于准备就绪状态,因此当启动其组件的新请求到达时,它会非常敏感。这意味着您的服务正在“运行”。这只是意味着将托管服务的进程已经创建并准备就绪。

关于android - 如何从 Activity 中停止在另一个进程中启动的 Intent 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33694333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com