当前位置: 移动技术网 > IT编程>移动开发>Android > Android AsyncTask的缺陷和问题总结

Android AsyncTask的缺陷和问题总结

2019年07月24日  | 移动技术网IT编程  | 我要评论

狼与美女音译歌词,豪门长媳太惹火,倒鸭子当事人

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)。

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网