为了账号安全,请及时绑定邮箱和手机立即绑定

Android必学-AsyncTask基础

难度中级
时长49分
学习人数
综合评分9.77
206人评价 查看评价
9.8 内容实用
9.9 简洁易懂
9.6 逻辑清晰
  • 为什么需要使用异步任务? 我们知道,Android中只有UI线程,也就是主线程才能进行对UI的更新操作,而其他线程是不能直接操作UI的.这样的好处是保证了UI的稳定性和准确性,避免多个线程同时对UI进行操作而造成UI的混乱.但Android是一个多线程的操作系统,我们总不能把所有的任务都放在主线程中进行实现,比如网络操作,文件读取等耗时操作,如果全部放到主线程去执行,就可能会造成后面任务的阻塞.Android会去检测这种阻塞,当阻塞时间太长的时候,就会抛出Application Not Responsed(ANR)错误.所以我们需要将这些耗时操作放在非主线程中去执行.这样既避免了Android的单线程模型,又避免了ANR. .AsyncTask为何而生? 提到异步任务,我们能想到用线程,线程池去实现.确实,Android给我们提供了主线程与其他线程通讯的机制.但同时,Android也给我们提供了一个封装好的组件--AsyncTask.利用AsyncTask,我们可以很方便的实现异步任务处理.AsyncTask可以在子线程中更新UI,也封装简化了异步操作.使用线程,线程池处理异步任务涉及到了线程的同步,管理等问题.而且当线程结束的时候还需要使用Handler去通知主线程来更新UI.而AsyncTask封装了这一切,使得我们可以很方便的在子线程中更新UI.
    查看全部
    1 采集 收起 来源:AsyncTask概述

    2017-06-07

  • AsyncTask四个方法:onPreExecute()、doInBackground()、onProgressUpdate()、onPostExecute()。 四个方法中只有doInBackground()运行在其他线程,而其他都运行在主线程。所以其他3个方法都可以更新UI,而只有doInBackground()需要做异步处理,并且不可以直接更新UI。 另外,安卓提供的onPostExecute()和onPregressUpdate()方法来承接了异步处理的操作,从而能够在异步处理的过程中,去更新UI,这也是AsyncTask所简化、所封装的非常好的方面。
    查看全部
    1 采集 收起 来源:总结

    2017-03-20

  • 反复执行上一节课的异步加载,而且是不等进度条满就后退再执行,会发现后面执行的进度条迟迟没有响应,为什么呢?这并非bug,而是 AsyncTask 所实行的一种机制。AsyncTask的底层是通过线程池去作用的。当一个线程没有完成的时候,后面的线程就无法开始。我们上一节课用了for()循环去执行进度条 的更新操作,必须等到for()循环结束后才会执行下一个Task。 --------- 那么,如何去解决这样的问题呢? 很简单,令AsyncTask的生命周期和Activity或者Fragment的生命周期保持一致就可以了。 回到ProgressBar,重写onPause(),在Activity执行onPause()的时候,对AsyncTask进行判断: 如果AsyncTask不为空且处于Running状态,我们就要取消该线程: protected void onPause() { super.onPause(); if(mTask!=null && mTask.getStatus()==AsyncTask.Status.RUNNING){ mTask.cancel(true); } } cancle()方法只是将对应的AsyncTask标记为cancel状态,并不是真正地取消线程的执行。 另外,我们在Java中也是没办法直接粗暴地停止一个线程,我们必须要等一个线程执行完毕之后才能继续其他线程的操作。 -------------- 那要如何快速停止线程呢? 1. 在onPause()中标记取消状态:mTask.cancel(true); 既然我们已经标记了cancel状态,那么可以在AsyncTask中监测这样的改变,一旦当前状态改为cancelled,我们就要跳出循环,立刻结束当前操作,从而结束整个线程逻辑。 2. 在doInBackground()方法的for()循环内添加isCancelled()对线程的状态进行判断: if(isCancelled())break; 3. 同理,在onProgressUpdate()方法中也做类似的处理: if(isCancelled())return; 通过如上操作,我们就能快速停止当前线程,将处理权交给下一个AsyncTask。
    查看全部
  • 构建AsyncTask子类的参数 AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数: Params:启动任务时输入参数的类型。 Progress:后台任务执行中返回进度值的类型。 Result:后台执行任务完成后返回结果的类型
    查看全部
  • 使用“AsyncTask”类“异步加载图片” 1. 在Activity中自定义“内部类”AsynckTask(因为要访问Activity获取到的资源) 1.1 三个类型分别为,String(用来传URL),Void(暂时不考虑进度条),Bitmap(用来返回图片) 2.实现必要的几个方法 3.在doInBackground方法中,执行异步的从网络获取图片任务 protected Bitmap doInBackground(String... params) { String urlStr = params[0]; //将传递过来的url字符串提取出来。 URLConnection urlConnection = null; InputStream inputStream = null; Bitmap bitmap = null; try { urlConnection = new URL(urlStr).openConnection();//获取Url连接。 inputStream = urlConnection.getInputStream();//从链接中获取图片数据流 bitmap = BitmapFactory.decodeStream(inputStream);//将图片数据流转化为Bitmap对象 } catch (MalformedURLException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } return bitmap; } 4.在onPostExeucte(Bitmap result)方法中更新UI imageView.setVisibility(View.VISIBLE); imageView.setImageBitmap(result);
    查看全部
    1 采集 收起 来源:与UI线程通信

    2017-02-17

  • 为什么需要使用异步任务? 我们知道,Android中只有UI线程,也就是主线程才能进行对UI的更新操作,而其他线程是不能直接操作UI的.这样的好处是保证了UI的稳定性和准确性,避免多个线程同时对UI进行操作而造成UI的混乱.但Android是一个多线程的操作系统,我们总不能把所有的任务都放在主线程中进行实现,比如网络操作,文件读取等耗时操作,如果全部放到主线程去执行,就可能会造成后面任务的阻塞.Android会去检测这种阻塞,当阻塞时间太长的时候,就会抛出Application Not Responsed(ANR)错误.所以我们需要将这些耗时操作放在非主线程中去执行.这样既避免了Android的单线程模型,又避免了ANR. .AsyncTask为何而生? 提到异步任务,我们能想到用线程,线程池去实现.确实,Android给我们提供了主线程与其他线程通讯的机制.但同时,Android也给我们提供了一个封装好的组件--AsyncTask.利用AsyncTask,我们可以很方便的实现异步任务处理.AsyncTask可以在子线程中更新UI,也封装简化了异步操作.使用线程,线程池处理异步任务涉及到了线程的同步,管理等问题.而且当线程结束的时候还需要使用Handler去通知主线程来更新UI.而AsyncTask封装了这一切,使得我们可以很方便的在子线程中更新UI.
    查看全部
    1 采集 收起 来源:AsyncTask概述

    2016-07-13

  • .为什么需要使用异步任务? 我们知道,Android中只有UI线程,也就是主线程才能进行对UI的更新操作,而其他线程是不能直接操作UI的.这样的好处是保证了UI的稳定性和准确性,避免多个线程同时对UI进行操作而造成UI的混乱.但Android是一个多线程的操作系统,我们总不能把所有的任务都放在主线程中进行实现,比如网络操作,文件读取等耗时操作,如果全部放到主线程去执行,就可能会造成后面任务的阻塞.Android会去检测这种阻塞,当阻塞时间太长的时候,就会抛出Application Not Responsed(ANR)错误.所以我们需要将这些耗时操作放在非主线程中去执行.这样既避免了Android的单线程模型,又避免了ANR. .AsyncTask为何而生? 提到异步任务,我们能想到用线程,线程池去实现.确实,Android给我们提供了主线程与其他线程通讯的机制.但同时,Android也给我们提供了一个封装好的组件--AsyncTask.利用AsyncTask,我们可以很方便的实现异步任务处理.AsyncTask可以在子线程中更新UI,也封装简化了异步操作.使用线程,线程池处理异步任务涉及到了线程的同步,管理等问题.而且当线程结束的时候还需要使用Handler去通知主线程来更新UI.而AsyncTask封装了这一切,使得我们可以很方便的在子线程中更新UI.
    查看全部
    1 采集 收起 来源:AsyncTask概述

    2016-06-21

  • 通过cancel方法可以取消一个ASyncTask,通过其中的Boolean参数,可以控制当cancel该ASyncTask的时候,线程是否继续完成他的操作,通常设置为true。但cancel方法只是标记该ASyncTask为cancel状态,并没有真正的取消线程的执行。 由于Java中也无法粗暴停止一个线程,因此,可以添加isCancel()方法,判断该ASyncTask的状态,由此决定是否退出对应的操作。
    查看全部
  • ASyncTack底层是通过线程池来执行的,当一个线程没有执行完的时候,后面线程没有办法执行。必须等上一个线程执行完毕以后,下一个线程才能执行。
    查看全部
  • AsyncTask必须等到前一个任务task执行完毕后,才能执行下一个任务。标记为cancel后,线程还是一直在执行,需要手动控制判断状态
    查看全部
  • AsyncTask个方法作用
    查看全部
    0 采集 收起 来源:与UI线程通信

    2016-05-04

  • AsyncTask子类回调方法
    查看全部
  • AsyncTask子类参数
    查看全部
  • 异步任务AsyncTask
    查看全部
    0 采集 收起 来源:总结

    2016-05-03

  • AsyncTask
    查看全部

举报

0/150
提交
取消
课程须知
本课程是Android初级课程 1、掌握基本的Android应用程序开发方法 2、掌握AsyncTask中个方法中参数的意义 3、掌握AsyncTask中4个常用的方法
老师告诉你能学到什么?
1、了解Android的单线程模型 2、 AsyncTask的基本构成 3、 AsyncTask的回调方法 4、 AsyncTask实例

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!