我有一个应用程序正在执行一些重复的后台任务。我正在使用service和Alarmmanager以及setrepeating方法。停止此服务的唯一方法是在我的活动屏幕上显示一个按钮(当然,android系统可以随时以任何理由杀死它,但我不关心android系统的作用)。我的问题是,当我的活动被Android系统摧毁一段时间后,我有一个永远运行的服务,除非Android杀死它。我的问题是如何在创建新活动后获取此服务的引用以阻止它(我假设我在旧的活动被销毁后创建新活动)?
答案 0 :(得分:0)
考虑bindService and unbindService。
创建活动后,您可以致电bindService
,并使用返回的活页夹与您的服务进行通信。服务既可以绑定也可以启动,以防您在活动结束后不想让绑定服务终止服务。
另一种方法可能是使用LocalBroadcastManager来在您的活动和服务之间进行通信。
答案 1 :(得分:0)
在MainActivity上使用绑定服务和取消绑定服务方法,以便在用户或Android系统明确销毁您的应用程序活动时,您可以调用解除绑定服务onDestroy()
,服务类将被销毁。
使用这篇文章作为指南:Example: Communication between Activity and Service using Messaging
答案 2 :(得分:0)
我想我无法清楚地解释我的问题。但我在这篇文章中找到了答案How to get reference to running service? Dawid Sajdak回答
private boolean isMyServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("your.service.classname".equals(service.service.getClassName())) {
return false;
}
}
return true;
}
if(isMyServiceRunning()) {
stopService(new Intent(ServiceTest.this,MailService.class));
}