当前位置 : 主页 > 手机开发 > android >

android – 如何避免缓存挂起的意图?

来源:互联网 收集:自由互联 发布时间:2021-06-11
给定两个具有不同数据A和B的相同小部件,当小部件A的数据显示在小部件启动的活动中时,按下后退按钮然后按下小部件B它一切正常.然而,当显示小部件A的数据时,按下主页按钮然后按下小
给定两个具有不同数据A和B的相同小部件,当小部件A的数据显示在小部件启动的活动中时,按下后退按钮然后按下小部件B它一切正常.然而,当显示小部件A的数据时,按下主页按钮然后按下小部件B,仍然显示小部件A的数据.从 Android – When launch the same activity from widget with different extras, how to prevent the same instance show up after returned from HOME button?开始,它表明我的问题是PendingIntents(对于小部件A和B)都是相同的,并且仅在额外内容上有所不同,因此被缓存.即在附加项中是小部件ID,这是我需要检索小部件按下操作的所有数据的密钥.一个建议是使用不同的数据,但我似乎无法让这个工作.这是代码:

Intent intent = new Intent(context, WidgetActivity.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setData(Uri.withAppendedPath(Uri.parse("droidln://widget/id/"),
               String.valueOf(appWidgetId)));
PendingIntent pendingIntent = 
               PendingIntent.getActivity(context, appWidgetId, intent, 0);

将setData添加到intent中没有产生任何区别.关于如何解决缓存挂起意图问题的任何想法?我也尝试过:

intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

intent.setAction("actionstring" + System.currentTimeMillis());

一切都没有效果.

尝试同时使用:

>挂起意图的不同操作 – intent.setAction(“actionstring”System.currentTimeMillis());
>正确的标志 – PendingIntent.FLAG_UPDATE_CURRENT(对于你的情况:PendingIntent.getActivity(context,appWidgetId,intent,PendingIntent.FLAG_UPDATE_CURRENT);

我在许多应用程序中使用这种PendingIntent样式,事实证明它是正确的.

我一直在使用的示例代码:

final ComponentName receiverName = new ComponentName(context, WidgetProvider.class);
Intent doSth = new Intent("REFRESH_ME" + System.currentTimeMillis());
doSth.setComponent(receiverName);
doSth.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
PendingIntent doSthPending = PendingIntent.getBroadcast(context, 0, doSth, PendingIntent.FLAG_UPDATE_CURRENT);
网友评论