美文网首页
Android面试线程—Asynctask和HandlerThr

Android面试线程—Asynctask和HandlerThr

作者: 天空蔚蓝依旧 | 来源:发表于2017-09-05 16:31 被阅读0次

    Asynctask

    定义:

    他本质上是一个封装了线程池和Handler的异步框架。

    说明:

    三个参数、五个方法

    Params:初始值

    Progress运行中值

    Result输出结果

    onPreExecute() 初始化

    doInBackground() 异步运行耗时操作(唯一个子线程中的方法,其他方法都在UI线程)

    onProgressUpdate() 更新数据UI

    onPostExecute()  运行结束是调用

    onCancelled() 

    具体执行步骤:

    mAsyncTask.execute("haha");----->onPreExecute()----->doInBackground(String... params)----->onProgressUpdate(Integer... values)----->onPostExecute(Stringresult)

    运行机制:

    当调用异步任务的execute("haha")后,在其方法体内直接调用onPreExecute(),

    执行onPreExecute()后开启一个线程池来启动一个Runnable在Runnable里面子线程去执行doInBackground(),

    之后doInBackground()由于是在子线程故其使用mHandler.sendMessage()将处理好的结果向主线程发送一个消息onProgressUpdate()来更新进度以及onPostExecute()来显示结果

    注意事项:

    1.内存泄露(非静态内部类持有匿名外部应用)

    2.结果丢失(如屏幕旋转,持有的对象是之前的Activity的对象,所以更新UI回无效)

    3.并行和串行(2.3之前并行,2.3之后串行,2.3后也可通过方法改为并行)

    4.生命周期(onDestroy中关闭Asynctask.cancel())


    HandlerThread

    定义:

    HandlerThread本质上是一个线程,继承自Thread。有自己的Looper对象,可以进行Looper循环,可以创建Handler。

    特点:

    HandlerThread可以在Handler的handlerMessage中执行异步方法

    HandlerThread优点是异步不会堵塞,减少对性能的消耗

    HandlerThread缺点是不能同时继续进行多任务处理,需要等待进行处理,处理效率较低

    HandlerThread与线程池不同,HandlerThread是一个串行队列,背后只有一个线程

    相关文章

      网友评论

          本文标题:Android面试线程—Asynctask和HandlerThr

          本文链接:https://www.haomeiwen.com/subject/numujxtx.html