如果应用程序被用户从应用程序管理器停止,想要重新启动服务。
Posted
技术标签:
【中文标题】如果应用程序被用户从应用程序管理器停止,想要重新启动服务。【英文标题】:Want to restart service if application stopped by user from application manager. 【发布时间】:2014-09-10 13:26:12 【问题描述】:我通过在服务类中使用代码 sn-p 来使用粘性 android 服务
@Override
public int onStartCommand(Intent intent, int flags, int startId)
return START_STICKY;
但是只有当应用程序被android o / s强制关闭时它才会重新启动,虽然当用户从应用程序管理器强制停止应用程序时,服务也会终止。 但是,我的要求是我想一直运行服务,直到应用程序安装在设备中。 有人可以帮我解决这个问题吗?
【问题讨论】:
你们的服务是做什么的?如果它一直在运行,则说明您存在设计问题,因为这会耗尽电池电量。阻止用户杀死你的服务让我觉得你正在做一些你不希望用户知道/控制的事情...... 是的 Nicklas,我理解这个问题,但它是客户端要求和它的应用程序功能,如果安装了应用程序,它想要跟踪登录的用户。 与持续运行的服务相比,使用另一种解决方案可能会更好。您可以在卸载应用时注册广播,并向服务器发送消息。除此之外,您可以假设您的应用程序已卸载,如果服务器在当前时间内没有收到来自设备的消息(如果用户在卸载时没有互联网连接)。就“登录”状态而言,您的意思是用户是否已登录应用程序,还是正在积极使用该设备?在任何一种情况下,您都不需要服务来检查这一点。 【参考方案1】:经过长期研究和博客推荐,如果用户从应用程序管理器中点击强制关闭应用程序,则无法再次自动重启。
不过,可以通过以下广播来启动停止的服务,例如 - USB 检测、蓝牙状态更改、设备重启等。在这些情况下,设备发送广播,如果您的应用能够接收这些通知,您可以重新启动您在广播中收到的上下文中的服务。
【讨论】:
【参考方案2】:您可以使用Forground Service
使您的服务活跃起来。
@Override
public int onStartCommand(Intent intent, int flags, int startId)
Notification notification=new Notification(R.drawable.icon,"The Service Is Running",System.currentTimeMillis());
Intent j=new Intent(this, Activity.class);
PendingIntent pi=PendingIntent.getActivity(this, 0,
j, 0);
notification.setLatestEventInfo(this, "Notification Message", "RunningService", pi);
notification.flags|=Notification.FLAG_NO_CLEAR;
startForeground(1, notification);
return START_STICKY;
【讨论】:
如果用户选择从应用程序管理器中停止应用程序,此前台服务将如何工作? @Pankaj :该服务将一直存在,直到通知出现为止。它可能会在设备可用内存不足时终止 嗨 Arash,我刚刚尝试了您的代码,当我运行应用程序时,会显示一个通知,但是一旦我从应用程序管理器停止应用程序(强制停止)通知就消失了,并且服务终止了。在这里,我想继续奔跑。希望你能帮忙。 @Pankaj :您无法阻止它强制停止或内存不足时,但当您的应用程序从任务管理器关闭时,它会使您的服务处于活动状态。即使是 Viber 等服务,也可以通过以下方式强制停止user.but 你可以为它制定一个时间表来重新打开它。 *为它制定一个计划以再次打开它:意味着您想说通过任何其他应用程序或其他方式开始?你能解释一下@Arash吗?【参考方案3】:这是不可能的。但是你可以使用前台服务。在内存不足的情况下,android os 可以杀死前台服务
【讨论】:
以上是关于如果应用程序被用户从应用程序管理器停止,想要重新启动服务。的主要内容,如果未能解决你的问题,请参考以下文章
我打开设备管理器发现里面是一片空白,看不到任何硬件设备,请问下这是怎么回事,期待回复!