AppWidget更新服务不会停止在从主机删除Widget

问题描述:

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

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

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

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

+0

重写onDisabled(上下文上下文)在这方面的帮助? – Aakash 2010-11-03 16:38:36

+0

引发任何异常? – 2010-12-06 12:57:38

+0

@ prateek-jain不会引发异常,但服务也不会停止。 – Aakash 2010-12-06 21:19:57

了很多研究,我终于修好了之后我​​开始计时。我的目标是在所有AppWidget实例从屏幕上移除时停止后台服务。

这是谁干的,

  1. 用于共享偏好来切换1和0 SharePref切换到1时,小部件的第一个实例是由用户在屏幕上放置。当应用程序窗口小部件的最后一个实例从屏幕上移除时,它会切换回0。

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

3.In @Override OnDisabled方法调用stopService。完美的作品。

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

* 此外,如果你不想做所有上述事情,让Android照顾服务等...使用IntentService。 * *

+1

另外请记住,这是解决AppWidget框架中的一个错误的关键,该框架已经在Google组中得到了关于getAppWidgetIds()的确认,该提供了随机值,并且无法从此方法知道您的小部件是否启动以及是否应该更新它。所以每次更新小部件时都要检查Shared Pref值,然后再进行更新。节省很多开销!让我知道是否有人想要代码。 – Aakash 2011-02-18 18:16:51

+0

你能分享一些说明性的源代码吗? – pfonseca 2011-02-21 22:19:39

+0

请分享源代码。 – UMAR 2011-10-19 07:58:47

我认为停止服务在服务本身中调用onDestroy。 它为我用下面的代码在服务

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

} 

定时器IST我在_startService无效

+0

不解决问题...试过了。 – Aakash 2010-12-13 02:07:27