Android服务意外关闭

时间:2012-12-15 07:33:51

标签: android service broadcastreceiver

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

1 个答案:

答案 0 :(得分:2)

  

一段时间后,Android停止服务

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

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

  • 如果是由于内存不足,则无法完成任何操作。当为内存杀死某些内容时,整个进程(包括应用程序对象)将被终止并且此时不会执行代码。

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

  

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

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

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