3

我有一个带有 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;
    }
4

1 回答 1

2

一段时间后服务被Android停止

首先重要的是为什么你的服务被android系统停止了,

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

  • 如果是由于内存不足,那么什么都做不了。当为了内存而杀死某些东西时,整个进程(包括应用程序对象)都被杀死并且此时没有代码在其中执行。

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

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

这是不可能的。您可以获得的最接近的方法是通过 startForeground(),但即使这样也不能保证您的服务将永远存在。

而且,这在 Android 中是一个严重的反模式。用户讨厌试图永远运行的应用程序,这就是我们必须与任务杀手等竞争的原因。

于 2012-12-15T07:49:00.030 回答