我怎么能停止我的RECEIVE_BOOT_COMPLETED服务

时间:2011-10-21 06:53:27

标签: android service

看到很多关于此的问题,但我无法解决这个问题。

我有这段代码

public class myBroadcastReceiver extends BroadcastReceiver {
private final String TAG = "myBroadcastReceiver";
  @Override
  public void onReceive(Context context, Intent intent) {
     if(intent.getAction().equals(Consts.ANDROID_INTENT_ACTION_BOOT_COMPLEATE)){
    Intent newinIntent = new Intent(context, ServiceBootCompleated.class);
    context.startService(newinIntent);
     }
  }
}

它启动Service,我可以使用此行调试它

android.os.Debug.waitForDebugger(); 

我看到return START_NOT_STICKY;已执行但仍然存在 该服务作为“正在运行”的服务可见 设置>程序>运行服务

除非我手动停止,否则永远不会调用onDestroy() 我该怎么做才能阻止它,
从“设置>程序>正在运行的服务”窗口中删除它?

2 个答案:

答案 0 :(得分:3)

完成您要在后台拨打stopSelf()

后要完成的工作

确保您在服务中所做的任何实际工作都是作为后台线程完成的,而不是在onCreate或onStartCommand中完成的。

有关服务生命周期的详细信息,请参阅http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle

示例:

public int onStartCommand(final Intent intent, final int flags, final int startId)
{       
    Thread thread = new Thread(new Runnable()
    {
        @Override
        public void run()
        {
                    //do work
                stopSelf();
        }
    },"MyWorkerThread");
    thread.start();
    return Service.START_NOT_STICKY;
}

答案 1 :(得分:0)

完成任务后,您必须执行context.stopService()来停止此类未绑定服务。

的问候,
SSuman185