Android 非同步任務 - AsyncTask
Android为什么要使用多线程
- 提高用户体验或者避免ANR(如果在主线程(UI线程)操作一些耗时的操作容易造成卡顿
android 规定主线程中不可以做http 连接操作。) - 异步
- 多任务
当主线程(UI线程)操作到一些复杂的IO操作(文件操作,网络操作,数据库操作),复杂运算等耗时操作,容易造成卡顿。
应用程序弹出“无响应”的对话框(ANR),那是因为在Android主线程中进行了超时的操作,过多的阻塞了主线程就会导致应用出现ANR的Waring。(android 规定主线程中不可以做http 连接操作)
AsyncTask是什么
AsyncTask,是android提供的輕量級的非同步類,可以直接繼承AsyncTask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度(可以通過介面實現UI進度更新),最後反饋執行的結果給UI主線程.
为什么使用AsyncTask
- AsyncTask能实现多线程,避免ANR
- 简单快捷易操作
- 过程可控
AsyncTask怎么使用
AsyncTask定义了三种泛型类型 Params,Progress和Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL。
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String。
`private class TestAsyncTask extends AsyncTask<String, Void, Boolean>
{
@Override
protected void onPreExecute()
{
//最先执行的就是这个。一遍添加进度条
}
@Override
protected Boolean doInBackground(String... params)
{
//这个是在后台执行的东西,就是说,它自动另外开了个线程运行,不影响你现在做的东西。
//复杂的IO操作(文件操作,网络操作,数据库操作),复杂运算等耗时操作
}
@Override
protected void onPostExecute(Boolean result)
{
if (result)
{
//后台执行的完毕后,它会用Result通知这里,就是执行这里了。
}
else
{
//所以最好判断一下result,写个else,判断后台执行的东西是不是出问题了。
}
}
}`