2

有一个像这样的循环的异步任务是一个好习惯吗?

while (true) { 
check queue and request API

因为我需要等待我的活动​​和服务需要与 APi 通信。

谢谢

4

2 回答 2

0

我假设“队列”是一个 Java 队列,也许是一个LinkedBlockingQueue. 如果是这样,则该队列是不必要的,因为AsyncTask有一个队列与其线程池一起使用。

所以,问题是:是什么触发了排队的事情?

如果触发器是用户事件(例如,菜单选择、按钮按下),只需让它启动一个AsyncTask,或者让它Service启动一个AsyncTask. 该工作将由AsyncTask系统排队。

如果触发器是时间的流逝(例如,我们想每 10 分钟检查一次外部服务器),我会使用AlarmManager并考虑从AsyncTask和 a切换Service到使用IntentService.

于 2010-02-27T00:17:59.063 回答
0

我有一个优先级队列,以便首先选择对 API 的重要调用。

我的程序有两个服务:

  • 将消息添加到队列时调用 API。对 api 的调用是由 Asinc 任务以这种方式进行的:

    messages.add(request);  
    new DownloadApiTask().execute();
    
  • 另一个服务正在更新本地数据库。为此,我有一个循环,我在其中调用第一个服务以从 API 获取数据。基本结构是:

    while i有数据要上传

    mFirstService.putMessage(请求)。

很好,问题是我每次 X 调用都有一个被拒绝的执行异常,我认为这可能是因为我每次接收消息时都会调用 asinc 任务。

为此,我正在考虑强制执行 asinck 任务来检查队列而不是执行它。

我希望你能理解我的问题。

谢谢

于 2010-02-27T00:39:48.400 回答