1

我有一个在无限循环中运行的工作线程。如果它的 http 请求队列为空,它会等待。一旦将 http 请求添加到队列中,它就会收到通知并执行此 http 请求。这一切正常,但我对此有一些疑问:

我正在做这样的事情(缩短!):

mHttpClient = new DefaultHttpClient();
mHttpPost = new HttpPost(MyHttpClient.getAbsoluteUrl(url);

while (true)
{
    // Check if the queue is empty, if so -> wait
    StringEntity se = new StringEntity(queue.poll());       
    mHttpPost.setEntity(se);
    HttpResponse response = mHttpClient.execute(mHttpPost);
}

问题是:如果队列有 100 个项目,这是最有效的方法吗?http连接是一直保持打开还是一次又一次地连接?如果它保持打开状态,在应用程序运行时始终保持打开状态是一个好主意,还是应该在新项目添加到队列之前关闭它?

第二个问题是关于无限循环的。当应用程序运行时,我需要线程一直运行,但无限循环仍然看起来不太好。我知道我可以做类似的事情:while(!cancelled)但我不调用thread.cancel()方法,因为我的意思是没有可以调用thread.cancel()的App.onDestroy()事件,对? 你会怎么处理?因为当线程被系统杀死时,我实际上想将队列保存到“磁盘”,但如何做到这一点?

对不起,很长的文字和我的英语不好

4

0 回答 0