appwidget-appWidgetIds(小部件的真实和虚幻实例)出现问题



同事们!我的问题是:我有一个带有配置活动的应用程序小工具(最小SDK-2.1),它工作正常,但有时开始工作得更慢。我以前登录并发现更新我的应用程序Widget方法onUpdate收到一个应用程序WidgetIds 数组

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Log.d("onUpdate", Arrays.toString(appWidgetIds));

但事实是,我在主屏幕上只有两个应用程序小工具的实例,但数组的长度大于2(二):4,有时为5或6。怎么会是这样呢?我的AppWidget更新缓慢的原因是的,我必须为所有id调用onUpdate方法,但有些id(正如其中一个所说的"幻影小部件")不是真实而正确。

也许,有人遇到过这样的问题,会帮助我找出如何处理真正的问题应用程序小部件ID。

附言:卸载然后重新安装应用程序小部件(之后所有的重影小部件都不见了)-不是正确解决我的问题。我想用程序控制ghost和real小部件。

有人知道如何修复这个错误吗?

此代码将删除小部件(所有,甚至屏幕上的小部件),因此不是理想的解决方案

ComponentName cn = new ComponentName(getApplicationContext(), YourWidget.class);
AppWidgetManager appWidgetManager =  AppWidgetManager.getInstance(getApplicationContext());
int[] appWidgetIds1 = appWidgetManager.getAppWidgetIds(cn);
AppWidgetHost host = new AppWidgetHost(getApplicationContext(), 0);
for (int appWidgetId : appWidgetIds1) {
host.deleteAppWidgetId(appWidgetId);
}

仍然存在删除4.2上的锁定屏幕窗口小部件的问题(onReceive从未调用)

好的,我在网上搜索了一点,发现这似乎是一个完整的android错误,现在还没有修复。如果可以,请尝试清除缓存。转到设置-->应用程序-->管理应用程序。然后转到您的home启动器应用程序并清除缓存。然后请重新启动你的应用程序,看看是否还有旧的应用程序小部件。我在网上发现了一些有趣的东西:

http://forum.xda-developers.com/showthread.php?t=1030804

http://eagle.phys.utk.edu/guidry/android/appWidget.html

甚至这也在Android开发者页面和Group Post上进行了讨论:

http://developer.android.com/guide/topics/appwidgets/index.html#AppWidgetProvider

https://groups.google.com/forum/?fromgroups=#!msg/android开发人员/Nl0e06rDCRY/4nAh3xnKBeQJ

他们谈论1.5中的一个问题,但我认为即使在更高的系统中也是一个问题。在小组帖子中有一个如何解决这个问题的例子:

@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = extras.getInt
(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
} else {
super.onReceive(context, intent);
}
} 

似乎并不是每个应用程序小部件都会自动删除,即使用户从主屏幕删除应用程序或替换小部件。如果这是正确的方向,请给我一些反馈。如果是,我们需要另一种方法来解决这个问题。对我来说,这也很有趣,但目前我没有笔记本电脑来检查。谢谢

我在一个月前写的应用程序中遇到了同样的问题,对我来说,这无关紧要。我找到了一个如何删除"幻影小部件"的教程。我从来没有测试过,只是尝试一下:

http://blog.fiziksphreak.com/2011/07/28/remove-phantom-widgets-in-android/

但是,你确定这会减慢你的应用程序的速度吗?我无法想象这会耗费大量资源?

编辑

这可能会有所帮助,而不是杀死旧的应用程序:

Bundle extras = intent.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID);

Bundle extras = intent.getExtras();
int[] appWidgetIds = extras.getIntArray(AppWidgetManager.EXTRA_APPWIDGET_IDS);

我不知道这是否是你搜索的内容。

最新更新