android应用被杀死后仍能运行服务,Android:当应用程序被杀时,保持服务运行

即使应用程序被杀,我也希望在后台运行IntentService 。 并且被“杀死”我的意思是按住主页按钮很长时间 – > 查看所有正在运行的应用程序 – >将我的应用程序放在一边 – > 应用程序被杀或按下后退按钮很长时间 – > 应用程序被杀

我的代码如下。 在我的MainActivity中:Intent intent = new Intent(this, MyService.class); this.startService(intent);

在我的MyService中:

public class MyService extends IntentService { @Override protected void onHandleIntent(Intent intent) { System.out.println("MyService started"); run(); } private void run() { while (true){ System.out.println("MyService still running"); doSomething(); waitSomeTime(); } } }

我看到应用程序打开时服务正在运行。 当我通过主页按钮最小化应用程序时,它仍在运行。 当我通过后退按钮关闭应用程序时它仍在运行。 但如果我如上所述杀死它,它就会停止。 我该如何解决这个问题?

如果您的应用程序启动了您的服务,那么实际上您的服务正在主进程上运行。 因此,当应用程序被杀死时,服务也将被停止。 所以你可以做的是,从服务的onTaskRemoved方法发送广播,如下所示:

Intent intent = new Intent("com.android.ServiceStopped"); sendBroadcast(intent);

并有一个广播接收器,将再次启动服务。 我试过了。 服务从所有types的杀戮中重新启动。

在onstart命令中放入START_STICKY …除非执行太多任务并且内核想要为它杀死它,否则此服务不会被杀死…

@Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i("LocalService", "Received start id " + startId + ": " + intent); // We want this service to continue running until it is explicitly // stopped, so return sticky. return START_STICKY; }

原因是您正在尝试使用IntentService。 以下是API文档中的一行

IntentService执行以下操作:

在处理完所有启动请求后停止服务,因此您永远不必调用stopSelf()。

因此,如果您希望您的服务无限期运行,我建议您扩展Service类。 但是,这并不能保证您的服务无限期运行。 如果内存处于低优先级状态,你的服务仍有可能被内核杀死。所以你有两个选择:

1)通过调用startForeground()方法使其在前台运行。

2)如果服务被杀,请重新启动服务。 以下是文档中的一部分示例,其中讨论了在服务被杀死后重新启动服务

public int onStartCommand(Intent intent, int flags, int startId) { Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show(); // For each start request, send a message to start a job and deliver the // start ID so we know which request we're stopping when we finish the job Message msg = mServiceHandler.obtainMessage(); msg.arg1 = startId; mServiceHandler.sendMessage(msg); // If we get killed, after returning from here, restart return START_STICKY; }

您可以在清单中使用android:stopWithTask="false" ,这意味着即使用户通过从任务列表中删除应用程序来杀死应用程序,您的服务也不会停止。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值