我們的活動可以從GCM通知中啓動。我們在GCM意圖中設置了附加內容,以確保用戶被帶到該GCM通知的消息線程,並且之後我們調用removeExtra
將其從意圖中移除。如何在同一意圖重新啓動活動時避免重複處理
如果用戶從最近的歷史記錄菜單啓動我們的應用程序,那麼活動的啓動時間與上次啓動時的意圖相同(例如,從GCM通知)。
這種情況是很容易發現:
Intent i = getIntent();
// If the caller intent is from the recent apps and has the RECIPIENT_ID_KEY
// extra we should remove it to avoid open the messages thread again
if (((i.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) &&
i.hasExtra(MyConstants.RECIPIENT_ID_KEY)) {
i.removeExtra(MyConstants.RECIPIENT_ID_KEY);
}
但是,我們也希望如果該活動已被破壞操作系統這個工作。此時,如果設置了開發人員選項「不保留活動」(僅適用於OS 4.0+),那麼當按下我們另一個屏幕上的後退按鈕時,活動會以相同的意圖繼續重新創建,導致糟糕發生的事情。
我們考慮在我們的GCM意圖中添加一個獨特的額外內容,並在我們處理完它後將其保存到共享偏好設置中。不過,我們還需要通過SEND image/jpg
意圖將圖像分享到我們的應用程序時才能工作。我們不控制這個意圖,那麼我們如何知道我們是否已經處理了它?我想我們可以使用文件/ URI信息,儘管這意味着如果用戶連續兩次共享相同的圖像,我們將忽略第二個。
有沒有一種乾淨簡單的方法來解決這個問題?
我們目前支持OS 2.3+,我們的應用程序在世界各地都可用。這裏是我的AndroidManifest.xml中的相關章節:
<activity
android:name=".ui.MyClass"
android:configChanges="orientation|screenSize"
android:launchMode="singleTop"
android:windowSoftInputMode="stateHidden" >
我想從GCM意圖中添加一個額外的內容,然後在Activity.onNewIntent()中檢查這個額外的存在綽綽有餘 – 2013-03-27 01:40:18
如果用戶從應用程序中啓動應用程序,onNewIntent()將不會被調用活動被破壞後的最近歷史記錄菜單(但仍然提供以前的意圖信息)。 – 2013-03-27 16:35:19
嗯......我想這就是我有時從onCreate()調用onNewIntent()的原因。當onNewIntent()被調用或者不被調用時,你描述的不同場景可能會受益? – 2013-03-27 16:41:29