3

我想要做的是一旦 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);
}

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

4

2 回答 2

5

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

这就是它做的...

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

  2. 服务中的@Override OnReceive 方法。收听这些广播 - AppWidget Enabled(当小部件的第一个实例放在屏幕上时广播),AppWidget Disabled(当小部件的最后一个实例从屏幕上删除时由操作系统广播)当 AppWidget Disabled 被广播时调用被覆盖的方法 OnDisabled 方法。

3.在@Override OnDisabled 方法中调用stopService。完美运行。

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

*此外,如果您不想执行上述所有操作并让 Android 处理服务等...请使用 IntentService。* *

于 2011-02-18T18:11:31.140 回答
0

我认为 stopservice 在服务本身中调用 onDestroy 。它适用于服务中的以下代码

@Override
public void onDestroy() {
    super.onDestroy();
    timer.cancel();
    //Toast.makeText(this, "Service Destroyed", Toast.LENGTH_LONG).show();

}

计时器是我在 _startService void 中启动的计时器

于 2010-12-07T11:36:33.847 回答