【问题标题】:How to hande each Intent once when using singleTask使用 singleTask 时如何处理每个 Intent
【发布时间】:2011-06-29 22:08:50
【问题描述】:

我正在使用单任务模式活动,它通过指定意图过滤器来处理某种类型的文件。 我需要只处理每个这样的文件 Intent 一次。问题是 onNewIntent() 仅在任务已经存在时才被调用,这迫使我也处理来自 onCreate() 的意图。不幸的是,onCreate() 被调用的原因有很多(例如屏幕旋转),而 getIntent() 返回的 Intent 可能在多个 onCreate() 中是相同的。 当然,可以使用一些丑陋的 hack 来解决这个问题,但我想知道优雅的解决方案是什么。 到目前为止,我想出的最佳解决方案是每次处理意图后 setIntent(new Intent(Intent.ACTION_MAIN)) 。这与 Web 服务器如何在 POST 页面后将您重定向到 GET 页面以避免因刷新而重做操作的模式类似。

谢谢!

【问题讨论】:

    标签: android android-activity android-intent launchmode


    【解决方案1】:

    我不确定我是否遇到了您的问题,但是一旦您调用意图并开始新活动, 在调用完成()之后立即;结束您要离开的活动。这将结束您的最后一个活动,并防止多个活动同时运行。

    此外,如果您使用屏幕旋转作为启动活动的一种方式,您始终可以通过使用“If and Else”语句设置一些检查来控制您不想多次启动的活动。

    【讨论】:

      【解决方案2】:

      删除 singleTask 将解决您的问题;
      调用remove singleTask的activity,可以替换为:

      intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
                    | Intent.FLAG_ACTIVITY_SINGLE_TOP);
      

      【讨论】:

        【解决方案3】:

        setIntent(null) 处理后怎么样?

        【讨论】:

        • 似乎达到了完全相同的效果。这是正确的方法吗?
        • 请勿使用此方法,有时有效,有时无效。谷歌寻求更合适的解决方案,我不确定什么 100% 一直有效,仍在测试 atm。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-01
        • 2018-10-21
        • 2017-01-12
        • 2016-01-14
        • 1970-01-01
        • 2016-05-31
        相关资源
        最近更新 更多