gpt4 book ai didi

java - 服务泄露了最初在此处注册的 IntentReceiver。您是否错过了对 unregisterReceiver() 的调用?

转载 作者:行者123 更新时间:2023-11-30 10:11:33 26 4
gpt4 key购买 nike

我正在使用前台 Android Service 通过 REST API 通过 Retrofit 请求资源,作为每 60 秒的计时器。此类服务也在与应用程序不同的进程中运行,这是必要的,这样 Android 就不会在进入打盹模式时终止它。

public class ResourceService extends Service {

...

private BroadcastReceiver mReceiver;

@Override
public void onCreate() {
super.onCreate();
// create mReceiver (BroadcastReceiver)
// create intentFilter (IntentFilter)
registerReceiver(mReceiver, intentFilter);
}

...
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// main logic
}

@Override
public void onDestroy() {
super.onDestroy();
unregisterReceiver(mReceiver);
}
}

当我注销应用程序时,onDestroy() 方法被调用,所以 unregisterReceiver() 也被调用。应用程序按预期进入登录 Activity ,服务成功停止。但是,logcat 出现以下异常:

09-18 09:30:06.627 849-849/foo.mycompany.es.myapp:externalProcess E/ActivityThread: Service foo.mycompany.es.myapp.resources.ResourcesService has leaked IntentReceiver foo.mycompany.es.myapp.resources.ResourcesService$2@7c90278 that was originally registered here. Are you missing a call to unregisterReceiver()?
android.app.IntentReceiverLeaked: Service foo.mycompany.es.myapp.resources.ResourcesService has leaked IntentReceiver foo.mycompany.es.myapp.resources.ResourcesService$2@7c90278 that was originally registered here. Are you missing a call to unregisterReceiver()?
at android.app.LoadedApk$ReceiverDispatcher.<init>(LoadedApk.java:1222)
at android.app.LoadedApk.getReceiverDispatcher(LoadedApk.java:993)
at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1348)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1328)
at android.app.ContextImpl.registerReceiver(ContextImpl.java:1322)
at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:630)
at foo.mycompany.es.myapp.resources.ResourcesService.registrarReceptor(ResourcesService.java:104)
at foo.mycompany.es.myapp.resources.ResourcesService.onCreate(ResourcesService.java:74)
at android.app.ActivityThread.handleCreateService(ActivityThread.java:3534)
at android.app.ActivityThread.-wrap6(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1732)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6776)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1496)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1386)

我看到一个similar answer关于主题,但它指的是 Activity 。这样的回答声明 unregisterReceiver() 应该放在 onPause() 方法中,但是在 Service 父类(super class)中没有这样的方法我可以覆盖。

有人知道上述错误的原因是什么吗?

提前谢谢你。

最佳答案

在onstartcommand中调用unregisterReceiver(locationReceiver)

关于java - 服务泄露了最初在此处注册的 IntentReceiver。您是否错过了对 unregisterReceiver() 的调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52384691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com