【问题标题】:Drop intents while IntentService is processing在 IntentService 处理时删除意图
【发布时间】:2011-05-22 18:08:11
【问题描述】:

如果我正确理解 IntentService 上的 API 文档,发送到 IntentService 的 Intent 会排队(如果它正在处理并按顺序处理)。

有没有一种简单的方法可以告诉 IntentService 在处理过程中它应该丢弃发送给它的所有意图?

干杯, 托斯滕

【问题讨论】:

  • 我没用过,不过看来你只需拨打setIntentRedelivery(true)?
  • 我认为这只会设置关于进程是否在onHandleIntent(Intent) 返回之前终止的意图重新传递首选项。我希望在 IntentService 处理过程中将意图发送到 IntentService 时忽略它。

标签: android service android-intent


【解决方案1】:

有没有简单的方法...?

不,据我所知,这不是一个简单的方法,但也许不是太难。

我想我已经看到了与此类似的问题,一个建议是通过从 Android 源代码复制代码来简单地定义您自己的 IntentService 类(代码不到 150 行,其中一些是 cmets)。

Intent 的“队列”由一个名为 ServiceHandler 的嵌套类管理,该类扩展了 Handler。如果您从源定义自己的“IntentService”,则可以添加方法来清除消息队列,甚至在处理 Intent 的过程中终止 Handler(如果这是您需要的)。

【讨论】:

    【解决方案2】:

    迟到总比没有好。是的,有一个简单的方法。覆盖onStart(),如果不想处理意图则返回,否则调用super.onStart()

    public void onStart(Intent intent, int startId) {
      if (processing()) {
        return;
      }
      super.onStart(intent, startId);
    } 
    

    但请注意,IntentService 的 javadocs 明确指出不应覆盖 onStart()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多