我想要做的是,一旦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);
}
有什么想法吗?谢谢你的帮助。
答案 0 :(得分:5)
经过大量研究后我终于解决了这个问题。我的目标是在屏幕上删除所有AppWidget实例时停止后台服务。
这就是它......
使用共享首选项切换1和0.当用户将小部件的第一个实例放在屏幕上时,SharePref切换为1。当从屏幕上删除最后一个App小部件实例时,它会切换回0。
服务中的@Override OnReceive方法。侦听这些广播 - AppWidget已启用(当窗口小部件的第一个实例放在屏幕上时广播),AppWidget已禁用(当窗口小部件的最后一个实例从屏幕上移除时由OS广播) 当广播AppWidget禁用时,调用重写方法OnDisabled方法。
3.在@Override OnDisabled方法中调用stopService。效果很好。
记住OnDeleted和OnDisabled之间的区别。当删除窗口小部件的实例时调用OnDeleted,这并不意味着要删除的窗口小部件是最后一个。即使屏幕上有一个小部件实例,我也希望我的服务仍然可以运行。
* 此外,如果您不想完成上述所有操作并让Android负责服务等...请使用IntentService。 * * 强>
答案 1 :(得分:0)
我认为stopservice在服务本身中调用onDestroy。 它适用于我使用服务
中的以下代码@Override
public void onDestroy() {
super.onDestroy();
timer.cancel();
//Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();
}
timer是我在_startService void
中启动的计时器