【Android基础知识】AsyncTask基本使用
来源:互联网 发布:什么绘画软件好 编辑:程序博客网 时间:2024/05/17 03:19
AsyncTask 任务
什么是线程的阻塞?
一个功能正在进行网络访问(耗时操作),另一个功能要实现打印功能,这样就会造成阻塞。如果阻塞超过5秒则会ANR错误。
什么是异步操作?
继承 AsyncTask<Void,Void,Void>类
实现 doInBackground(Void ... Arg0){执行的操作}方法就可以启动另一个线程,这个线程和主线程不在同一个线程中,不会造成阻塞。
AsyncTask的基本使用方法
生成该类的对象,并调用execute方法之后,首先执行的是onPreExecute方法,然后执行doInBackground()方法,最后执行onPostExecute()方法
例子,去网络下载一张图片,模拟耗时操作:
/** * 异步任务 AsyncTask * AsyncTask<Params,Progress,Result>是一个抽象类,通常 * 用于被继承,继承AsyncTask需要指定如下三个泛型参数: * Params: 启动任务时输入的参数 * Progress:启动任务执行中返回进度值的类型。 * Result:后台执行任务完成后返回结果的类型 * * doInBackground :必须重写,异步执行后台线程将要完成的任务。 * onPreExecute:执行后台耗时操作前被调用,通常完成一些初始化操作。 * onPostExecute:当 doInBackground 完成后,系统会自动调用 * onPostExecute()方法,并将doInBackground方法的返回的值传给该方法。 * onProgressUpdate 在doInBackground方法中调用publishProgress方法 * 更新任务的执行进度后,就会触发该方法。 */public class MainActivity extends Activity {private ImageView imageView;private ProgressBar progressBar;MyAsyncTasks tasks;private static final String URL="https://www.baidu.com/img/bd_logo1.png"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imageView = (ImageView)findViewById(R.id.imageView1); progressBar = (ProgressBar)findViewById(R.id.progressBar1);// MyAsyncTask task = new MyAsyncTask();// task.execute(); tasks = new MyAsyncTasks(); tasks.execute(URL); } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); if(tasks != null && tasks.getStatus() == AsyncTask.Status.RUNNING){ //cancel 方法只是将对应的AsycnTask标记为cancel状态,并不是真正的停止 tasks.cancel(true); } } class MyAsyncTasks extends AsyncTask<String, Void, Bitmap>{ @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); progressBar.setVisibility(View.VISIBLE); } @Override protected Bitmap doInBackground(String... params) { // TODO Auto-generated method stub String urlString = params[0]; Bitmap bitmap = null; URLConnection connection; InputStream is; if(isCancelled()){ //cancel状态则直接结束 return null; } try{ connection = new URL(urlString).openConnection(); is = connection.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); bitmap = BitmapFactory.decodeStream(bis); is.close(); bis.close(); Thread.sleep(3000); }catch(IOException e){ e.printStackTrace(); } catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();} return bitmap; } @Override protected void onPostExecute(Bitmap result) { // TODO Auto-generated method stub super.onPostExecute(result); progressBar.setVisibility(View.GONE); imageView.setImageBitmap(result); } }}
0 0
- 【Android基础知识】AsyncTask基本使用
- Android异步任务之AsyncTask基本使用
- 【Android基础知识】IntentService基本使用
- 【Android基础知识】ViewPager基本使用
- AsyncTask的基本使用
- AsyncTask的基本使用
- AsyncTask的基本使用
- AsyncTask的基本使用
- asynctask基本使用
- AsyncTask基本使用
- 【AsyncTask】Android AsyncTask使用入门
- Android异步消息处理机制(3)AsyncTask基本使用
- 【Android基础知识】Apache HttpClient的基本使用
- 【AsyncTask使用】Android AsyncTask 使用完全解析
- Android 的AsyncTask使用
- Android:AsyncTask使用
- Android:AsyncTask使用
- android AsyncTask使用总结
- openstack neutron介绍
- 彻底理解 模拟频率、数字频率、模拟角频率
- 【智能硬件】打印机微信公众配置WIFI模块
- Java文件下载
- 51nod 1190 最小公倍数之和 V2(莫比乌斯反演)
- 【Android基础知识】AsyncTask基本使用
- 【目标检测】Faster RCNN算法详解
- 字符类的数字转化成数字类型
- sql server存储过程循环调用
- Leetcode 1. Two Sum (Easy) (cpp)
- 对面向对象的理解和this static的理解
- Android 提示超出64K的解决办法
- mysql 外键
- POJ 3281 Dining