Android 非同步任務 - AsyncTask

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,判断后台执行的东西是不是出问题了。
  }
  }
}`

http://yuchen.blog.51cto.com/2739238/593019