如何在以相同意图重新启动活动时避免重复处理

时间:2013-03-27 00:45:46

标签: android android-intent android-activity

我们的活动可以通过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" >

1 个答案:

答案 0 :(得分:0)

我对如何解决这个问题很感兴趣:

  

但是,在将图像共享到我们的应用程序时,我们也需要这样做   通过SEND图像/ jpg意图。

一旦处理完图像,我就会在意图上添加一个额外的标记。可以想象,我在进行文件处理之前检查了那个标志。即使Intent是由另一个应用程序创建的,这也有效。