不确定是否从BroadcastReceiver

时间:2016-10-07 19:17:14

标签: android service broadcastreceiver android-service android-notifications

我有一项服务,我开始使用

Intent serviceIntent = new Intent(getActivity().getApplicationContext(), LocationService.class);
getActivity().startService(serviceIntent);

当应用进入后台时,未关闭,只是不在前台:即按主页按钮,我这样做:

Notification notification = mBuilder.build();
service.startForeground(NOTIFICATION, notification);

将服务带到前台并显示持续通知。

点击通知的关闭操作时会触发BroadcastReceiver(添加了通知操作)。

BroadcastReceiver停止服务:

@Override
public void onReceive(Context context, Intent intent) {
    Intent serviceIntent = new Intent(context.getApplicationContext(), LocationService.class);
    context.stopService(serviceIntent);
}

现在,有两种情况:

  1. 当应用进入后台但未关闭时,当下拉通知栏并点击关闭操作时 - >服务的onDestroy被称为正常。我可以看到来自Toast的{​​{1}}和Log条消息。

  2. 当应用关闭时(从应用列表中删除),意味着只有服务正在运行,在下拉通知栏并点击关闭操作时 - > 它不会看起来像服务onDestroy被调用!那里的代码没有执行,我 cant 看到来自onDestroy的{​​{1}}和Toast条消息。

  3. 然而,似乎服务确实停止了,因为我可以看到该应用已从设置中移除 - >点击关闭后,运行应用

    那么,服务会被破坏吗?如果是这样,为什么Log中的代码不会被执行?

    如何确保调用onDestroy

    显然,它与好的"这个事实有关。场景,应用程序仍然在后台,并在"坏"方案,应用程序已关闭。

    修改

    感谢CommonsWare和John Leehey的评论,我明白可能会终止"过程"并且"没有保证"将调用onDestroy

    我的onDestroy看起来像这样:

    onDestory()

    我应该在其他地方执行onDestory@Override public void onDestroy() { super.onDestroy(); stopLocationUpdates(); googleApiClient.disconnect(); Foreground.get(this).removeListener(this); // set default zoom sharedPrefrencesManager.putFloat(getString(R.string.zoom_last_location_key), 15); Log.i("test", "onDestroy"); } 之类的操作吗?因为无法保证stopLocationUpdates();被调用?

0 个答案:

没有答案