AsyncTask介绍:
1. 意义,不多说了,网上太多。
2. 建议,看看AsyncTask的源代码,其实简单
3. 代码:
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
/**
* async task manager factory
*
* @author wei.zhou
*
*/
public class AsyncTaskFactory {
private final static String TAG = "AsyncTaskFactory # init";
/**
* Asynchronous task to return the results after treatment
*
* @author wei.zhou
*
*/
public static class AsyncResult {
// url
public String _url;
// byte[]
public byte[] _byteBuffer;
}
/**
* Callback processing is complete
* @author wei.zhou
*
*/
public static interface IProgressCallback{
/**
* Time-consuming operation
*/
public void progressCallback(AsyncResult result) ;
}
/**
* Asynchronous callback interface after the task
*
* @author wei.zhou
*
*/
public static interface IResultCallback {
/**
* Synchronous Callback
*
* @param result
*/
public void resultCallback(AsyncResult result);
}
// //////////////////////////////////////////////////////////
// ***************
// //////////////////////////////////////////////////////////
/**
* Asynchronous downloads package data downloaded from the network and returns the result as a byte [] array
*
* @author wei.zhou
*
*/
private class AsyncDownLoaderTask extends android.os.AsyncTask<String, Integer, AsyncResult> {
/** synchronous Callback */
private IResultCallback _resultCallback;
/** ProgressCallback */
private IProgressCallback _progressCallback ;
/**
* The parameters of the implementation of,url...., the method running in the asynctask thread
*/
@Override
protected AsyncResult doInBackground(String... params) {
final AsyncResult result = new AsyncResult();
result._url = params[0];
result._byteBuffer = download(params[0]);
// callback processing
if(_progressCallback != null)
_progressCallback.progressCallback(result) ;
//
return result;
}
/**
* call by main thread
* Do not do anything in the time-consuming method of operation within
* The results
*/
@Override
protected void onPostExecute(AsyncResult result) {
// After the implementation of the callback
if (_resultCallback != null)
_resultCallback.resultCallback(result);
}
/**
*
*/
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
/**
* The implementation of the callback interface to receive
*
* @param callback
* @param params
*/
public final void execute(IProgressCallback proCallback,IResultCallback callback, String... params) {
//
_progressCallback = proCallback ;
//
_resultCallback = callback;
//
execute(params);
}
/**
* Download Data
*
* @param _url
* @return
*/
public final byte[] download(String _url) {
URL url = null;
HttpURLConnection conn = null;
InputStream input = null;
ByteArrayOutputStream out = null;
byte[] r_buffer = null;
try {
url = new URL(_url);
conn = (HttpURLConnection) url.openConnection();
input = conn.getInputStream();
out = new ByteArrayOutputStream();
//
byte buf[] = new byte[1024 * 256];
int len;
//
while ((len = input.read(buf)) > 0) {
out.write(buf, 0, len);
}
r_buffer = out.toByteArray();
//
out.close();
input.close();
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
url = null;
conn = null;
input = null;
out = null;
}
//
return r_buffer;
}
}
/** */
private static AsyncTaskFactory _instance;
/**
* Private constructor
*/
private AsyncTaskFactory() {
System.out.println(TAG);
}
/**
* Get instance object
* @return
*/
public static final AsyncTaskFactory getInstance() {
if (_instance == null)
_instance = new AsyncTaskFactory();
//
return _instance;
}
/**
* Add asynchronous task
*
* @param proCallback : Time-consuming operation, read, write IO......,call by async task thread
* @param resCallback : Not time-consuming operation, call by main UI thread
* @param params:url1
*/
public final void addSyncTask(IProgressCallback proCallback,IResultCallback resCallback, String... params) {
new AsyncDownLoaderTask().execute(proCallback,resCallback, params);
}
}
4. 使用方式:
asyncFactory.addSyncTask(new AsyncTaskFactory.IProgressCallback() {
// 耗时操作,该方法是在syncTask的线程中调用。
@Override
public void progressCallback(AsyncResult result) {
// 下载完数据后的操作,如,写到文件中,设置对象的变量.....
}
},new AsyncTaskFactory.IResultCallback() {
// 该方法是被UI线程调用
@Override
public void resultCallback(AsyncResult result) {
// 把该数据设置到对应的UI上,如,通过byte[] 创建 bitmap
}
}, url[i]);
分享到:
相关推荐
总的来说,`AsyncTask`是Android开发者处理简单异步任务的首选工具,通过合理的封装,我们可以创建可复用、易于维护的异步组件,提升应用性能和用户体验。然而,对于更复杂的后台处理需求,如长时间运行的服务或大量...
【标题】:OkHttp+AsyncTask封装请求框架不需手动解析 在移动应用开发中,网络请求是必不可少的一部分。OkHttp是一款高效的HTTP客户端库,它以其简洁的API、优秀的性能和连接管理而受到广泛欢迎。而Android中的...
AsyncTask是Android开发中用于在UI线程之外执行耗时操作的一种工具,它允许开发者在后台线程中执行任务,并在完成后更新UI。在Android应用中,由于主线程(UI线程)负责处理用户交互,如果在此线程上执行耗时操作,...
Android 使用AsyncTask 后监听异步加载完毕的动作 AsyncTask 的使用方法网上有很多例子,使用起来也非常的方便。这里就不详细说具体的使用方法了,同学可以Google 一下,很多。 场景模拟 当我们在加载一个列表的...
本篇文章将详细介绍如何在Android平台上进行TCP Socket通信的封装,并结合实际例子进行说明。 首先,我们需要创建一个`SocketClient`类,作为客户端来连接服务端。这个类通常包含以下组件: 1. **初始化连接**:在...
AsyncTask就是为了实现这一目标而设计的,它通过封装线程和Handler,简化了在后台线程和主线程之间切换的复杂性。 AsyncTask有三个泛型参数:Params、Progress和Result。Params是输入类型,通常用于传递到后台执行...
`AndroidAsyncTaskHttp`是基于Android的`AsyncTask`和`HttpClient`的封装库,它简化了HTTP请求的过程,使得开发者能够更加便捷地进行网络操作。`AsyncTask`是Android提供的一个轻量级机制,用于在后台线程执行耗时...
AsyncTask就是一个封装过的后台任务类,顾名思义就是异步任务。 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI...
由于Android的UI更新必须在主线程中进行,AsyncTask通过内部封装Handler和线程池,使得开发者可以在后台执行耗时操作,然后在UI线程中更新结果。 首先,AsyncTask的使用步骤如下: 1. 创建一个继承自AsyncTask的...
以下是一些关于“Android网络请求封装”的详细知识点: 1. **异步网络请求**: - Android中的网络操作必须在非UI线程中执行,否则会导致ANR(Application Not Responding)错误。因此,通常使用AsyncTask、Handler...
"Android异步封装调用Webservice"是指将调用Web服务的过程进行封装,使其能够在后台线程执行,避免阻塞主线程,提升用户体验。C# Webservice是一种基于.NET框架的服务,可以通过SOAP协议与其他平台(如Android)进行...
AsyncTask是Android中用于在后台线程执行耗时操作并更新UI的一种机制。它通过封装了线程管理和与主线程的交互,简化了在UI线程中处理异步任务的流程。下面我们将深入探讨AsyncTask的使用、原理以及如何更新UI。 ...
Android为了降低这个开发难度 提供了AsyncTask AsyncTask就是一个封装过的后台任务类 顾名思义就是异步任务 AsyncTask直接继承于Object类 位置为android os AsyncTask 要使用AsyncTask工作我们要提供三个泛型参数 ...
将AsyncTask封装到一个单独的Fragment中,可以确保任务在屏幕旋转时不会被中断。例如,创建一个`AsyncTaskFragment`,并在`onCreateView()`或`onActivityCreated()`中启动任务。 3. **ProgressDialog与屏幕旋转** ...
这篇内容我们将深入探讨如何在Android中封装SQLite数据库,并介绍与"Android Sqlite封装类"相关的知识点。 首先,Android提供了`SQLiteOpenHelper`类,它是操作SQLite数据库的基础。我们通常会创建一个继承自`...
"Android 封装了ListView及各种View的下拉刷新和上拉加载"这一主题,就是关于如何在Android应用中实现这种功能的讲解。 下拉刷新(Pull-to-Refresh)允许用户通过在列表顶部向下拖动来触发刷新操作,通常用于更新...
综述 在Android中,我们需要进行一些耗时的操作,会将这个操作放在子线程中进行。... 实际上AsyncTask内部也就是对Handler和线程池进行了一次封装。它是一个轻量级的异步任务类,它的后台任务在线程池
- 支持异步操作,利用Android的AsyncTask或现代的RxJava等库,避免阻塞UI线程。 - 遵循命名规范,使方法和参数易于理解。 总之,“android 数据库封装小插件”通过SQLitePacker等类,实现了对Android数据库操作的...
"android数据库操作封装"主要是为了提高代码的可读性、可维护性和复用性,通过创建自定义的数据访问对象(DAO)层和数据库帮助类来实现。 1. 数据库Helper类: 在Android中,我们通常会创建一个继承自`...