android.os.AsyncTask<String, Void, Integer>
来源:互联网 发布:手机短信的软件 编辑:程序博客网 时间:2024/06/07 02:45
简介
AsyncTask可以使得使用UI线程变的更容易更适当,它可以在后台运行一些操作然后在UI上展现,不用操作具体的线程和handlers
一个 asynchronous task包括三种基本类型(调用参数,进度和结果),和四个步骤(调用开始,在后台运行,处理进度,结束)
), and most often will override a second one (onPostExecute(Result).)
使用方法描述
Asynchronous Task必须是作为一个子类来使用,
task实例必须在UI线程创建
execute(Params...)必须在UI线程调用
不要手工调用onPreExecute(), onPostExecute(Result), doInBackground(Params...), onProgressUpdate(Progress...)。
task只可以execute一次,执行多次就报异常
一个例子
类的定义
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
类的使用
new DownloadFilesTask().execute(url1, url2, url3);
三种基本类型的说明
Params, 传给task的参数的类型
Progress, 表示进度单位的类型
Result, 返回类型
不是所有的task都需要定义类型,如果没有则使用void,如下所示
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
四个步骤的说明
onPreExecute():
在task被执行之后,立刻调用
doInBackground(Params...):
onPreExecute执行完毕后,执行该方法,参数传到了这个方法中,执行完毕后必须返回一个值,还可以使用 publishProgress(Progress...) 发布进度到onProgressUpdate(Progress...),便于更新进度
onProgressUpdate(Progress...):
publishProgress(Progress...)被调用后,就执行该方法,显示进度信息
通常是显示一个进度条,或在text域里显示日志信息
onPostExecute(Result)
当doInBackground(Params...)执行完毕后即执行该方法
手机实名制 OCR功能中的实例
例子一
定义
class OcrTask extends AsyncTask<String, Void, OcrMessage>
{
@Override
protected OcrMessage doInBackground(String... arg0)
{
ApplyService service = new ApplyService(getApplicationContext());
return service.ocrTest(save_file_path);
}
@Override
protected void onPostExecute(OcrMessage result)
{
returnImageScan(result);
}
}
调用
OcrTask ocr = new OcrTask();
ocr.execute(save_file_path);
例子二
保存图片任务,参数是byte数组,是图片对应的byte数组
class SavePhotoTask extends AsyncTask<byte[], Void, Integer>
{
String picname;
@Override
protected Integer doInBackground(byte[]... datas)
{
byte[] data = datas[0];
Bitmap bitmap;
BitmapFactory.Options ops2 = new BitmapFactory.Options();
ops2.inSampleSize = 1;
bitmap = BitmapFactory.decodeByteArray(data,0, data.length,ops2);
try {
FileOutputStream fos = OcrCameraActivity.this.openFileOutput("output.jpg",Activity.MODE_WORLD_READABLE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, fos);
fos.flush();
fos.close();
save_file_path = "output.jpg";
}catch (Exception e) {
e.printStackTrace();
}
return 0;
}
@Override
protected void onPostExecute(Integer result)
{
call_OCR();
}
}
调用
SavePhotoTask savePhotoTask = new SavePhotoTask();
savePhotoTask.execute(data);
- android.os.AsyncTask<String, Void, Integer>
- android.os.AsyncTask<String, Void, Integer>
- android.os.AsyncTask<String, Void, Integer>
- AsyncTask<String, Void, Integer>
- Android.os.AsyncTask类
- AsyncTask<String, Integer, Bitmap>异步加载
- 扫描SD卡异步任务new AsyncTask<Integer, Integer, String>()
- android.os.AsyncTask注意问题
- android.os.AsyncTask的应用
- Getting NoClassDefFoundError: android.os.AsyncTask
- android.os.AsyncTask(文件下载)
- android The method execute(Void[]) is ambiguous for the type new AsyncTask<Void,Void,Void>(){}
- 异常:ava.lang. NoClassDefFoundError: android .os.AsyncTask
- java.lang.NoClassDefFoundError: android.os.AsyncTask
- AsyncTask<String ,Integer,Integer>类中各个方法的执行先后顺序
- android os;异步消息处理机制:AsyncTask和Handler
- android-Void 和 void
- The method execute(Void[]) is ambiguous for the type new AsyncTask<Void,Void,Void>(){}
- Shell脚本语法-摘录
- 最常用的12种设计模式
- 动态连接库的访问
- 写在天地初开,一片鸿蒙之前
- 独立blog出来啦: http://zhangl.in
- android.os.AsyncTask<String, Void, Integer>
- 宏的进一步理解
- 动态连接库的创建
- 评估所需的工时
- HDU 3902 Swordsman
- c的指针与复杂变量---const
- sql 进程操作存储过程
- Struts2中s:set标签和s:if标签小结
- “Microsoft JET Database Engine 错 误 '80040e09' 不能更新。数据库或对象为只读”的解决办法(转)