Ответ 1
Попробуйте использовать:
openAppIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Вы также можете использовать:
openAppIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Действия по воспроизведению проблемы:
Знаете ли вы, как избежать этой проблемы? (Я видел некоторые аналогичные вопросы о stackoverflow, но не строго, что я хотел)
Спасибо!!!!
Код:
public class MyWidgetProvider extends AppWidgetProvider {
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// Build the intent to call the service//
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
Intent openAppIntent = new Intent(context.getApplicationContext(), MainActivity.class);
openAppIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent openAppPendingIntent = PendingIntent.getActivity(context, 0, openAppIntent, 0);
remoteViews.setOnClickPendingIntent(R.id.widgetLinearLayout, openAppPendingIntent);
//// ETC…///
}
Попробуйте использовать:
openAppIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Вы также можете использовать:
openAppIntent.setFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
Я предлагаю использовать:
openAppIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
Это приведет к повторному использованию уже существующих Activity
и onNewIntent
. Вы можете обновить интерфейс оттуда, если требуется.
Для дополнительной справки: Developer.android.com - FLAG ACTIVITY SINGLE TOP
Изменить
Launcher Activity - это тот, который имеет следующий фильтр намерений в AndroidManifest.xml
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
Эти флаги не будут работать, если виджет запустит новую TASK, у которой есть собственный стек действий.
Я думаю, что лучше всего было бы прочитать эту статью Developer.android.com - ДИЗАЙН ЗАДАЧИ ДЕЯТЕЛЬНОСТИ
Сообщите нам, если вы что-нибудь найдете.
Ive успешно предотвратил несколько экземпляров активности, добавив этот атрибут в манифест:
android:launchMode="singleInstance"
Это, по сути, говорит Android, что эта деятельность - Highlander ( "Only Only One" ) и предотвратит создание нескольких экземпляров. Всякий раз, когда действие, о котором идет речь, открыто, Android либо приносит существующий экземпляр на передний план, либо в некоторых случаях уничтожает и воссоздает текущий экземпляр.