appwidget appWidgetIds的麻烦(小部件的真实和虚幻实例)

Ale*_*alo 9 android instance android-widget android-appwidget

同事!我的问题是:我有一个配置活动的应用程序小部件(最小的SDK - 2.1),它工作正常但有时它开始工作得更慢.我记录并发现在更新我的App Widget方法之前onUpdate收到了一个App Widget ID数组

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

但事实是,我在主屏幕上只有两个App Widget实例,但是数组的长度超过2(2):4,有时是5或6.它怎么可能如此?我的AppWidget更新缓慢的原因是我必须为所有id调用onUpdate-method,但是有些ID(正如一个人说"幻影小部件")不真实和正确.

也许,有人遇到过这样的问题并且会帮助我弄清楚如何只处理真正的app widget ID.

PS卸载然后重新安装应用程序小部件(之后所有鬼小部件都消失了) - 不是正确解决我的问题.我想以编程方式控制幽灵和真实小部件.

有人知道如何解决这个错误吗?

BeN*_*XuS 4

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

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);
}
Run Code Online (Sandbox Code Playgroud)

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