Android AsyncTask几个注意事项
来源:互联网 发布:小米note3网络设置 编辑:程序博客网 时间:2024/06/10 20:37
CSDN上的这个系列文章《Android异步处理系列文章索引》对AsyncTask讲解的很清楚,特别是其中的几个例子特别好。最近在在做一个Android应用开发,都是用AsyncTask来完成后台任务,简单总结一下。
通常使用AsyncTask,是通过继承这个超类来完成的,如:
class BackgroundTask extends AsyncTask<Object,Object,Object>
{
@Override
protected Object doInBackground(Object... params)
{
return null;
}
}
子类必须重载 doInBackground方法。“<>”里面的三个类型,依次代表执行参数类型、进度参数类型和结果参数类型。doInBackground的参数类型必须是执行参数类型,返回的类型必须和结果参数类型。这三个类型应该根据需要来定,其实用Object也可以,用的时候在做类型转换。启动一个AsyncTask,可以在这样做:
BackgroudTask bt = new BackgroundTask();
bt.execute("param");
使用AsyncTask的容易犯下的错误是在doInBackground方法里面直接对UI元素进行操作。如果需要和UI进行交互,可以配合使用publishProgress和onProgressUpdate。比如
@Override
protected Object doInbackground(Object... params)
{
...
publishProgress("完成了20%");
...
publishProgress("完成了80%");
...
return null;
}
protected void onProgressUpdate(Object... progress){
...
textView1.setText((String)progress[0]);
...
}
这里onProgressUpdate是工作在UI线程的。
使用AsyncTask的另一个问题是关于cancel。实际上,单单调用AsyncTask对象的cancel方法,并不能停止doInBackground方法的继续执行。通常比较接受的方法是设置一个标志位,也就是在每次执行前检查一下某个变量的值(或者可以调用isCancelled方法判断),来决定继续执行还是停止。这种处理手段对于一些循环性的工作比较有用,但是对于一些循环性弱的工作可能并不怎么有效。这也算是AsyncTask的一个弱点。和Thread相比,AsyncTask还有一个弱点是效率的问题,这个可以在本文开头给出的链接中找到相关的信息。
AsyncTask还有一个问题和onPreExecute方法有关。这个方法是工作在UI线程的。虽然是叫onPreExecute,但是doInBackground方法(也就是实际上的execute),并不会等待onPreExecute方法做完全部操作才开始执行。所以,一般还是不要用这个方法,可以在调用AsyncTask对象的execute方法之前就把该完成的操作完成,以免引起某些错误。
AsyncTask还有一个方法是onPostExecute,这个方法也是工作在UI线程,它是在doInBackground方法执行结束,并返回结果后调用。这个方法里面可以调用UI线程的startActivity,这样可以实现完成大量后台操作后,自动跳转Activity的功能。这个方法里面也可以执行另一个AsyncTask的execute方法。
- Android AsyncTask几个注意事项
- 『ANDROID』AsyncTask的使用注意事项
- AsyncTask注意事项
- AsyncTask注意事项
- android jni中的几个注意事项
- Android基础 Android AsyncTask使用注意事项以及总结
- Android使用套接字的几个注意事项
- android Intent和Intent过滤器几个注意事项
- 使用Android Stdio时的几个注意事项
- android AsyncTask的方法在哪几个线程中调用
- Asynctask解析以及注意事项
- AsyncTask使用注意事项
- Asynctask解析以及注意事项
- 关于AsyncTask的注意事项
- AsyncTask的注意事项
- Asynctask解析以及注意事项
- Asynctask解析以及注意事项
- Asynctask解析以及注意事项
- 《Python数据分析与挖掘实战》笔记(二):Python2.7语法和第三方库
- 20.调用系统浏览器打开网页-隐式Intent的用法
- 终于开通了,以后这里将会记录我学习中的点点滴滴
- YOLO工程代码如何在windows上配置和运行!window上YOLO训练样本的制作
- 注册表获取系统驱动版本信息
- Android AsyncTask几个注意事项
- 遍历Map集合的四种方式
- 27_键盘输入_Scanner类的使用_import简单入门
- TNS-12535 TNS-00505
- XML教程进阶05_相关技术
- org.apache.commons.lang.StringUtils 将数组变成字符串
- 高考作文做个标题党,有何不好!
- 练习65
- 统计数组中相同的某一元素的其他 指定元素总和