我有一个在无限循环中运行的工作线程。如果它的 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()事件,对? 你会怎么处理?因为当线程被系统杀死时,我实际上想将队列保存到“磁盘”,但如何做到这一点?
对不起,很长的文字和我的英语不好