我有一个带有 BroadcastReceiver 的服务,它通过方法“exampleMethod()”与 Activity 通信。该服务启动并正常工作,但过了一会儿它被 Android 停止,我必须重新启动它。能保证服务不会长时间停止吗?
public class SMS_Service extends Service{
private BroadcastReceiver rec_sms = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
MainActivity.exampleMethod();
}
};
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
最佳答案
after a while Service is stopped by Android
首先重要的是你的服务为什么被android系统停止,
当用户直接与该进程的组件(即 Activity )交互时,Android 会非常努力地保持该进程运行,除非在特殊情况下,否则您不会看到它被杀死。
如果是内存不足,那就没办法了。当为了内存而杀死某些东西时,整个进程(包括应用程序对象)都被杀死,此时没有代码在其中执行。
如果服务只是因为不再需要运行而被销毁,它的 onDestroy() 将被调用,当稍后需要该服务时,将创建一个新实例并调用 onCreate()。
Is it possible to make sure that the service is not stopped for a long time?
这是不可能的。您可以获得的最接近的方法是通过 startForeground(),但即使这样也不能保证您的服务将永远存在。
此外,这是 Android 中一个严重的反模式。用户讨厌试图永远运行的应用程序,这就是为什么我们必须与任务 killer 等进行斗争。
关于Android 服务意外关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13890343/