Android - Как при запуске одного и того же действия из виджета с разными дополнениями, как предотвратить появление одного и того же экземпляра после возврата из кнопки HOME? - PullRequest
4 голосов
/ 05 ноября 2010

У меня есть виджет, который содержит 4 кнопки для отображения 4 котировок акций, каждая из которых будет запускать один и тот же вид деятельности Quote.class для показа информации об акциях. В onUpdate () он устанавливает pendingIntent с дополнениями с символом акции. После того, как я нажимаю кнопку A, она переходит к операции «Цитировать», которая показывает акцию А. Затем я нажимаю кнопку «НАЗАД» на главном экране, операция «Цитировать» вызывает функцию onDestroy (), и когда я нажимаю кнопку «В», акция В будет отображаться правильно. Однако, когда я нажимаю кнопку HOME после того, как она показывает акцию A, операция Quote вызывает только onStop без вызова onDestroy (), затем, когда я нажимаю кнопку B, она вызывает onStart () и показывает тот же экземпляр, который показывает акцию A.

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.etappwidget); 
setQuoteIntent(context, views, R.id.view1, "BAC", 1);
setQuoteIntent(context, views, R.id.view2, "C", 2);
setQuoteIntent(context, views, R.id.view3, "GOOG", 3);
setQuoteIntent(context, views, R.id.view4, "AAPL", 4);

 private static void setQuoteIntent(Context context, RemoteViews views, int viewId, String symbol, int requestCode) {
 Intent i = new Intent(context, Quote.class);
 i.putExtra("SYMBOL", symbol);
 i.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
 PendingIntent pi = PendingIntent.getActivity(context, requestCode, i, PendingIntent.FLAG_UPDATE_CURRENT);
 views.setOnClickPendingIntent(viewId, pi);

}

Изначально я думал, что добавление флага в Intent должно решить эту проблему. Но я пытался i.setFlags (Intent.FLAG_ACTIVITY_MULTIPLE_TASK или FLAG_ACTIVITY_NEW_TASK или FLAG_ACTIVITY_NO_HISTORY), ни один из них не имеет никакого значения.

Так есть ли способы заставить его работать? Как я могу удалить стек истории из кнопки HOME? Как я могу вызвать onCreate в цитате и получать новые дополнения, когда нажимаю кнопку B? Любая помощь приветствуется. Спасибо

Ответы [ 5 ]

2 голосов
/ 05 ноября 2010
  • Обычно onDestroy не вызывается, если вы выполняете простое переключение задач (например, удерживаете кнопку HOME). Если вам нужно выполнить очистку, вам нужно войти в onPause.
  • Я считаю, что проблема в том, что у вас есть PendingIntent, который отличается только на дополнительные. PendingIntents кэшируются, поэтому, если вы используете два с одинаковым действием и данными, они будут перезаписывать друг друга. Вы можете обойти это, предоставив каждому несколько случайных данных. Попробуйте передать символ в данных, а не через лишние (что в любом случае предпочтительнее).
1 голос
/ 11 марта 2012
clickIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

Так как: Уровень API 1 Если установлено, новое действие не сохраняется в стек истории. Как только пользователь уходит от него, деятельность закончена Это также может быть установлено с noHistory приписывать.

Это решило мою проблему при реализации действий с виджетами.

1 голос
/ 05 ноября 2010

Вы можете попробовать это:

        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

Ваша активность не будет отображаться в стеке истории

0 голосов
/ 05 ноября 2010

Если вы используете другое действие в своем намерении и используете флаг SingleTop или аналогичный и переопределяете onNewIntent, чтобы определить правильное действие, которое должно сработать.Вы должны быть готовы обработать намерение в onCreate и onNewIntent.

0 голосов
/ 05 ноября 2010

Когда вы нажимаете дом, скорее всего, действие не будет уничтожено. В таком случае он переводится в состояние pause . Итак, я полагаю, что ваш код для запуска представления акций будет размещен в onCreate , а не onResume . Таким образом, перемещение их в onResume должно решить проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...