Android服务意外关闭

Android服务意外关闭

问题描述:

我有一个BroadcastReceiver服务,它通过“exampleMethod()”方法与活动进行通信。此服务启动并正常工作,但过了一段时间它被Android停止,我必须重新启动它。可以确保服务很长一段时间不会停止?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中的一个严重的反模式。用户讨厌试图永远运行的应用程序,这就是为什么我们必须与任务杀手等相抗衡的原因。