Android  AsyncTask的缺陷和问题总结

 更新时间:2017年03月07日 14:10:59   投稿:lqh  
这篇文章主要介绍了Android AsyncTask的缺陷和问题总结的相关资料,需要的朋友可以参考下

Android  AsyncTask的缺陷和问题总结

在Android开发中,AsyncTask可以使得用户避免直接使用Thread类和Handler 来处理后台操作,适用于需要异步处理数据并将数据更新到界面上的情况。AsyncTask适用于后台操作只有几秒的短时操作。但是AsyncTask本身存在很多糟糕的问题,如果使用中不注意,将会影响程序的健壮性。

1、生命周期

       很多开发者会认为一个在Activity中创建的AsyncTask会随着Activity的销毁而销毁。然而事实并非如此。AsyncTask会一直执行, 直到doInBackground()方法执行完毕。然后,如果 cancel(boolean)被调用, 那么onCancelled(Result result) 方法会被执行;否则,执行onPostExecute(Result result) 方法。如果我们的Activity销毁之前,没有取消 AsyncTask,这有可能让我们的AsyncTask崩溃(crash)。因为它想要处理的view已经不存在了。所以,我们总是必须确保在销毁活动之前取消任务。总之,我们使用AsyncTask需要确保AsyncTask正确地取消。

       另外,即使我们正确地调用了cancle() 也未必能真正地取消任务。因为如果在doInBackgroud里有一个不可中断的操作,比如BitmapFactory.decodeStream(),那么这个操作会继续下去。

2、内存泄漏

        如果AsyncTask被声明为Activity的非静态的内部类,那么AsyncTask会保留一个对创建了AsyncTask的Activity的引用。如果Activity已经被销毁,AsyncTask的后台线程还在执行,它将继续在内存里保留这个引用,导致Activity无法被回收,引起内存泄露。

3、结果丢失

       屏幕旋转或Activity在后台被系统杀掉等情况会导致Activity的重新创建,之前运行的AsyncTask会持有一个之前Activity的引用,这个引用已经无效,这时调用onPostExecute()再去更新界面将不再生效。

4、并行还是串行

      在Android 1.6之前的版本,AsyncTask是串行的,在1.6至2.3的版本,改成了并行的。在2.3之后的版本又做了修改,可以支持并行和串行,当想要串行执行时,直接执行execute()方法,如果需要并行执行,则要执行executeOnExecutor(Executor)。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android编程实现简易弹幕效果示例【附demo源码下载】

    Android编程实现简易弹幕效果示例【附demo源码下载】

    这篇文章主要介绍了Android编程实现简易弹幕效果,涉及Android动画及视图动态操作相关技巧,并附带demo源码供读者下载参考,需要的朋友可以参考下
    2017-01-01
  • Android中处理apple-touch-icon详解

    Android中处理apple-touch-icon详解

    这篇文章主要介绍了Android中处理apple-touch-icon详解,在Android如果想把网页放到桌面上,也需要使用Touch Icon图标才可实现,本文即讲解Android中处理Touch Icon的一些知识,需要的朋友可以参考下
    2015-01-01
  • Android微信SDK实现分享

    Android微信SDK实现分享

    这篇文章主要介绍了Android微信SDK实现分享的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android 开发随手笔记之使用摄像头拍照

    Android 开发随手笔记之使用摄像头拍照

    在Android中,使用摄像头拍照一般有两种方法, 一种是调用系统自带的Camera,另一种是自己写一个摄像的界面,本篇文章给大家介绍android开发随手笔记之使用摄像头拍照,感兴趣的朋友一起学习吧
    2015-11-11
  • Flutter实现倒计时功能

    Flutter实现倒计时功能

    这篇文章主要为大家详细介绍了Flutter实现倒计时功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • android的消息处理机制(图文+源码分析)—Looper/Handler/Message

    android的消息处理机制(图文+源码分析)—Looper/Handler/Message

    这篇文章写的非常好,深入浅出;android的消息处理机制(图+源码分析)—Looper,Handler,Message是一位大三学生自己剖析的心得,感兴趣的朋友可以了解下哦,希望对你有所帮助
    2013-01-01
  • Flutter中抽屉组件Drawer使用详解

    Flutter中抽屉组件Drawer使用详解

    这篇文章主要为大家详细介绍了Flutter中抽屉组件Drawer使用,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 一篇文章揭开Kotlin协程的神秘面纱

    一篇文章揭开Kotlin协程的神秘面纱

    最近看了下Kotlin的协程,觉得挺好的,写篇文章总结总结,所以下面这篇文章主要给大家介绍了关于Kotlin协程的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-08-08
  • Android打造属于自己的时间钟表

    Android打造属于自己的时间钟表

    这篇文章主要为大家详细介绍了Android自定义一个属于自己的时间钟表的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-12-12
  • Android Studio中Run按钮是灰色的快速解决方法

    Android Studio中Run按钮是灰色的快速解决方法

    这篇文章主要介绍了Android Studio中Run按钮是灰色的快速解决方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2018-03-03

最新评论