2013-03-27 66 views
2

我們的活動可以從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" > 
+0

我想從GCM意圖中添加一個額外的內容,然後在Activity.onNewIntent()中檢查這個額外的存在綽綽有餘 – 2013-03-27 01:40:18

+0

如果用戶從應用程序中啓動應用程序,onNewIntent()將不會被調用活動被破壞後的最近歷史記錄菜單(但仍然提供以前的意圖信息)。 – 2013-03-27 16:35:19

+0

嗯......我想這就是我有時從onCreate()調用onNewIntent()的原因。當onNewIntent()被調用或者不被調用時,你描述的不同場景可能會受益? – 2013-03-27 16:41:29

回答

0

我感興趣的是如何解決部分:

但是,我們也需要這通過分享圖片到我們的應用程序 工作時SEND圖像/ jpg意圖。

只要我處理圖像,我就在意圖上加上一個額外的標誌。正如你可以想象的那樣,我在進行文件處理之前檢查該標誌。即使Intent是由其他應用程序創建的,也是如此。