簡體   English   中英

Android - 當從具有不同附加功能的小部件啟動相同的活動時,如何防止從HOME按鈕返回后顯示相同的實例?

[英]Android - When launch the same activity from widget with different extras, how to prevent the same instance show up after returned from HOME button?

我有一個小部件,其中包含4個按鈕,顯示4個股票價格,每個按鈕將啟動到相同的活動Quote.class以顯示股票詳細信息。 在onUpdate()中,它將使用庫存符號設置pendingIntent和extras。 在我按下按鈕A之后,它進入顯示股票A的Quote活動。然后我點擊BACK按鈕進入主屏幕,Quote活動調用onDestroy(),當我點擊按鈕B時,股票B將正確顯示。 但是,當我在顯示庫存A后點擊HOME按鈕時,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按鈕中刪除歷史堆棧? 當我按下按鈕B時,如何在Quote活動中調用onCreate並獲取新的額外內容? 任何幫助表示贊賞。 謝謝

  • 如果您執行簡單的任務切換(例如按住HOME按鈕), onDestroy可能無法被調用是正常的。 如果你需要進行清理,它需要進入onPause
  • 我認為問題是你有一個PendingIntent只有額外的不同。 PendingIntents被緩存,因此如果您使用具有相同操作和數據的兩個,它們將相互覆蓋。 你可以通過給每個隨機數據來規避這一點。 嘗試在數據中傳遞符號而不是通過額外傳遞(無論如何都是首選)。

你可以試試這個:

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

您的活動將不會在歷史堆棧中看到

clickIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);

從以下版本開始:API Level 1如果設置,則新活動不會保留在歷史堆棧中。 一旦用戶離開它,活動就完成了。 這也可以使用noHistory屬性設置。

這解決了我在實現小部件活動時的同樣問題。

當你按回家時,很可能不會破壞活動。 在這種情況下,它處於暫停狀態。 所以,我猜你啟動股票視圖的代碼將駐留在onCreate而不是onResume 因此,將那些移動到onResume應該可以解決問題。

如果您在Intent中使用不同的Action並使用SingleTop或類似的標志並覆蓋onNewIntent來檢測應該執行該操作的正確操作。 您需要准備好處理onCreate和onNewIntent中的意圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM