Java 服务在引导时启动,但不应该启动

Java 服务在引导时启动,但不应该启动,java,android,broadcastreceiver,android-service,Java,Android,Broadcastreceiver,Android Service,我有一个开关,当点击一个电池电量通知开始。这是一项注册广播接收器的服务。当切换处于false状态时,通知将消失。即使状态为false,如果我启动设备,通知也会启动,因此服务也会启动。我无法理解这个问题,但我在logCat中看到,当我关闭切换时,它会显示以下错误: 12-18 14:15:03.149: E/ActivityThread(337): Service com.dd.androreboot.NotificationService has leaked IntentReceiver co

我有一个开关,当点击一个电池电量通知开始。这是一项注册广播接收器的服务。当切换处于
false
状态时,通知将消失。即使状态为false,如果我启动设备,通知也会启动,因此服务也会启动。我无法理解这个问题,但我在logCat中看到,当我关闭切换时,它会显示以下错误:

12-18 14:15:03.149: E/ActivityThread(337): Service com.dd.androreboot.NotificationService has leaked IntentReceiver com.dd.androreboot.NotificationService$1@44eecef0 that was originally registered here. Are you missing a call to unregisterReceiver()?
12-18 14:15:03.149: E/ActivityThread(337): android.app.IntentReceiverLeaked: Service com.dd.androreboot.NotificationService has leaked IntentReceiver com.dd.androreboot.NotificationService$1@44eecef0 that was originally registered here. Are you missing a call to unregisterReceiver()?
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:805)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:606)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1430)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1410)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ContextImpl.registerReceiver(ContextImpl.java:1404)
12-18 14:15:03.149: E/ActivityThread(337):  at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:467)
12-18 14:15:03.149: E/ActivityThread(337):  at com.dd.androreboot.NotificationService.onCreate(NotificationService.java:105)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ActivityThread.handleCreateService(ActivityThread.java:2572)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ActivityThread.access$1800(ActivityThread.java:135)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
12-18 14:15:03.149: E/ActivityThread(337):  at android.os.Handler.dispatchMessage(Handler.java:102)
12-18 14:15:03.149: E/ActivityThread(337):  at android.os.Looper.loop(Looper.java:136)
12-18 14:15:03.149: E/ActivityThread(337):  at android.app.ActivityThread.main(ActivityThread.java:5017)
12-18 14:15:03.149: E/ActivityThread(337):  at java.lang.reflect.Method.invokeNative(Native Method)
12-18 14:15:03.149: E/ActivityThread(337):  at java.lang.reflect.Method.invoke(Method.java:515)
12-18 14:15:03.149: E/ActivityThread(337):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
12-18 14:15:03.149: E/ActivityThread(337):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
12-18 14:15:03.149: E/ActivityThread(337):  at dalvik.system.NativeStart.main(Native Method)
105行是:

this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));

对于服务: 您应该在onDestroy()中注销接收器

对于活动: 在onResume()中注册接收器

您应该在onpause()中注销接收器


当您完成了服务/活动,不再需要
操作\u电池\u更换
广播时,您应该在
onDestroy
中调用
注销接收器(mBatInfoReceiver)
,或者确切地说是在哪里?我写了
注销接收器(mBatInfoReceiver)
onDestroy
中。。没有更多的错误,但启动后,通知再次显示!为什么在onPause中而不是onDestroy方法中?如何从服务调用
mBatInfoReceiver
到活动?问题是通知总是在启动时启动。。我尝试使用切换按钮的SharedReferences;启动完成后,我调用启动服务的广播接收器(AutoStartReceiver)。但是不起作用。。我传递了首选项的
tgpref
值,但没有传递任何内容。。现在启动后不会启动。。只要我打开门application@David_D你到底需要什么?无论您是需要在启动时启动服务,还是需要在特定时间(如3秒5分钟)内连续运行服务,。。。
this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
@Override
    protected void onDestroy() {
    unregisterReceiver(mBatInfoReceiver);
   }
@Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
        this.registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED));
    }
@Override
    protected void onPause() {
    unregisterReceiver(mBatInfoReceiver);
   }