jba*_*ros 5 java android android-service android-broadcastreceiver
我正在使用前台 AndroidService通过 REST API 请求一个带有 Retrofit 的资源,作为每 60 秒的计时器。此类服务也在与应用程序不同的进程中运行,这是必要的,以便 Android 在进入 Doze 模式时不会杀死它。
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我注销应用程序时,onDestroy()方法被调用,因此unregisterReceiver()也被调用。应用程序按预期进入登录活动,服务成功停止。但是,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)
Run Code Online (Sandbox Code Playgroud)
我在该主题上看到了类似的答案,但它指的是活动。这样的答案状态unregisterReceiver()应该放在onPause()方法中,但是Service超类中没有这样的方法可以覆盖。
有谁知道上述错误的原因是什么?
先感谢您。
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |