ask*_*ask 14 multithreading android asynchronous httprequest background-process
在Android应用程序中,我必须向URL发出多个GET请求,以便将数据传输到外部服务器(这就是第三方API的工作方式).
数据偶尔出现.我将这些数据存储在队列中,并希望以异步方式将其发送到服务器,而不会降低主UI线程的速度.队列中的每个数据单元都需要GET请求.即使应用程序关闭,也必须清空队列.
这样做的最佳做法是什么?请发布/指导我编写代码/教程.
Com*_*are 31
这样做的最佳做法是什么?
这将取决于"这个"是什么以及这项工作在哪里完成.
如果"this"是"异步工作",您将以一种形式或方式使用线程:
如果您的HTTP操作正在驱动UI,您可以使用AsyncTask,因此您可以安全地更新UIonPostExecute()
如果您的HTTP操作完全在后台,并且您希望一次执行一个,请使用IntentService具有自己的后台线程和工作队列的a
如果您的HTTP操作完全在后台,并且您希望在某个时间进行,并且您担心确保设备在所有这些过程中保持清醒,请考虑我的 WakefulIntentService
如果您的HTTP操作完全在后台,但您觉得您希望一次执行多个操作,请Service使用Executor自己的线程池来自行编写,确保在完成工作时关闭该服务(如IntentService并确保设备保持清醒状态WakeLock(也许是一个WifiLock)
等等.
如果"this"是"HTTP GET"请求,请使用:
HttpUrlConnection, 要么
HttpClient, 要么
OkHttp(包装带有附加好处的那些),或者
改造(如果您的GET请求实际上是Web服务调用),或
Volley(如果你喜欢你的HTTP包装代码没有文档,不支持,但Googly)
任意数量的其他第三方包装器库
如果"this"是"queue",请使用Queue该类,或者LinkedBlockingQueue如果您计划让多个线程同时使用它.
如果"这个"是另外的东西,我无法帮助你,因为我厌倦了猜测.
您可以使用AsyncTask进行自己的异步HTTP GET调用,但除非您从学习的角度来看,否则我建议您不要这样做.如果你想要一个漂亮,干净和稳定的解决方案,我建议你使用众所周知的Android Asynchronous Http Client第三方库.从网站:
"基于异步回调的Android Http客户端构建在Apache的HttpClient库之上.所有请求都在应用程序的主UI线程之外发出,但任何回调逻辑都将在与使用Android的Handler消息创建回调的同一线程上执行通过."
制作GET非常简单:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
Run Code Online (Sandbox Code Playgroud)