AppWidget更新服务不会在正在从主机删除的窗口小部件上停止

Aak*_*ash 3 android android-widget android-appwidget

我想要做的是,一旦AppWidget从用户的Android手机的主屏幕中删除,我想停止更新AppWidget的后台服务.

这是我正在使用的代码...不明白什么是错的?

@Override
 public void onDeleted(Context context, int[] appWidgetIds){
 Intent serviceIntent = new Intent(context, UpdateService.class);
 context.stopService(serviceIntent);
 super.onDeleted(context, appWidgetIds);
}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢您的帮助.

Aak*_*ash 5

经过大量的研究,我终于修复了它.我的目标是,如果从屏幕上删除所有AppWidget实例,则停止后台服务.

这就是它做的......

  1. 使用共享首选项来切换1和0.当用户将小部件的第一个实例放在屏幕上时,SharePref切换为1.当从屏幕上删除最后一个App小部件实例时,它会切换回0.

  2. @Override服务中的OnReceive方法.倾听这些广播 - AppWidget启用(广播当小部件的第一个实例是把屏幕上),AppWidget禁用(当控件的最后一个实例从屏幕上消失的OS广播)当AppWidget残疾人是广播调用重写方法OnDisabled方法.

3.在@Override OnDisabled方法中调用stopService.工作完美.

记住OnDeleted和OnDisabled之间的区别.当删除窗口小部件的实例时调用OnDeleted,这并不意味着要删除的窗口小部件是最后一个.即使屏幕上有一个小部件实例,我也希望我的服务仍然可以运行.

*此外,如果您不想完成上述所有操作并让Android负责服务等...请使用IntentService.**