【问题标题】:Is there a limit to the queue size in an IntentService?IntentService 中的队列大小是否有限制?
【发布时间】:2013-11-21 15:41:07
【问题描述】:

我不太可能遇到任何可能存在的问题,但我可能会向 IntentService 发送大量意图。

我很想知道您可以向 IntentService 发送多少 Intent 是否有上限?队列有大小限制吗?我在文档中找不到任何关于此的内容。

提前致谢

【问题讨论】:

    标签: android intentservice


    【解决方案1】:

    tl;博士号

    来自安卓源(API 19):

    看起来IntentService 只是使用绑定到线程的常规LooperHandler

    当您使用新意图在意图服务上调用 start 时,它只是将意图作为消息发送给处理程序。

    @Override
    public void onStart(Intent intent, int startId) {
        Message msg = mServiceHandler.obtainMessage();
        msg.arg1 = startId;
        msg.obj = intent;
        mServiceHandler.sendMessage(msg);
    }
    

    处理程序:

    private final class ServiceHandler extends Handler {
        public ServiceHandler(Looper looper) {
            super(looper);
        }
    
        @Override
        public void handleMessage(Message msg) {
            onHandleIntent((Intent)msg.obj);
            stopSelf(msg.arg1);
        }
    }
    

    Handler 使用的Looper 有一个MessageQueue,它没有可以添加的最大项目数。

    【讨论】:

    • 请务必阅读 Terek 的回答。你总是受到系统资源的限制。不过,知道那是什么样子会很有趣。 Handler背后的队列结构是什么?也许是这个限制。
    【解决方案2】:

    理论上没有限制,但根据传入的数据大小,应用可能会耗尽内存。

    【讨论】:

      猜你喜欢
      • 2012-01-13
      • 1970-01-01
      • 2012-06-18
      • 2016-10-30
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多