IntentService中的队列大小是否有限制?

3

我可能不会达到任何可能存在的极限,但我有可能向一个IntentService发送大量的意图。

我很好奇是否有发送到IntentService的意图数量上限?队列有大小限制吗?我在文档中找不到有关这方面的内容。

谢谢。

2个回答

5

简而言之,不行。

从Android源代码(API 19)来看:

似乎IntentService只是使用一个普通的Looper和与线程绑定的Handler

当您使用新意图调用IntentService的启动方法时,它只是将意图作为消息发送到处理程序。

@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背后的队列结构是什么?也许就是那个限制。 - Nick

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接