Android服务意外关闭

Android服务意外关闭,android,service,broadcastreceiver,Android,Service,Broadcastreceiver,我有一个带有BroadcastReceiver的服务,它通过方法“exampleMethod()”与活动进行通信。这项服务启动并正常工作,但过了一段时间,它被Android停止,我必须重新启动它。是否可以确保服务不会长时间停止 public class SMS_Service extends Service{ private BroadcastReceiver rec_sms = new BroadcastReceiver() { @Override

我有一个带有BroadcastReceiver的服务,它通过方法“exampleMethod()”与活动进行通信。这项服务启动并正常工作,但过了一段时间,它被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;
    }
一段时间后,服务被Android停止

第一件重要的事情是为什么你的服务会被android系统停止

当用户直接与该进程的某个组件(即活动)交互时,Android将非常努力地保持该进程运行,除非在特殊情况下,否则您不会看到它被杀死

  • 如果是由于内存不足,则无法执行任何操作。当为内存杀死某些东西时,整个进程(包括应用程序对象)都会被杀死,此时不会在其中执行任何代码

  • 如果服务只是因为不再需要运行而被销毁,那么将调用它的onDestroy(),当以后需要该服务时,将创建一个新实例并调用onCreate()

是否可以确保服务不会长时间停止 时间

这是不可能的。您可以通过startForeground()获得最接近的服务,但这并不能保证您的服务永远有效

此外,这在Android中是一种严重的反模式。用户讨厌试图永远运行的应用程序,这就是为什么我们必须对付任务杀手之类的东西