栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Android中的WeakReference / AsyncTask模式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Android中的WeakReference / AsyncTask模式

如何解决这种情况?

WeakReference
允许
Activity
进行垃圾回收,所以你不要有内存泄漏。

空引用意味着

AsyncTask
不能
盲目尝试更新不再附加的用户界面,这将引发异常(例如,未附加到窗口管理器的视图)。当然,您必须检查是否为空以避免NPE。

如果我的asynctask正在下载十个文件,并且在完成5个文件后,活动重新启动(由于方向更改),那么我的FileDownloadingTask是否会再次调用?

取决于您的实现,但可能是这样-如果您不故意做一些不必要的重复下载操作,例如将结果缓存在某个地方。

AsyncTask
最初调用的那个会发生什么?

在早期版本的Android中,它可以运行到完成,下载所有文件只是为了丢弃它们(或缓存它们,具体取决于您的实现)。

在较新的Android操作系统中,我怀疑

AsyncTask
s和
Activity
它们的启动都被杀死了,但我怀疑的依据只是RoboSpice的内存泄漏演示(见下文)实际上并未泄漏到我的JellyBean设备上。

如果我可以提供一些建议:

AsyncTask
不适合执行可能长时间运行的任务,例如联网。

IntentService
如果您可以接受单个工作线程,则是一种更好(但仍然相对简单)的方法。
Service
如果要控制线程池,请使用(本地)-注意不要在主线程上工作!

如果您正在寻找一种在后台可靠地执行联网的方法,RoboSpice看起来不错(免责声明:我没有尝试过;我没有隶属关系)。Play商店中有一个RoboSpice
Motivations演示应用程序
,它通过演示所有可能出错的地方(包括WeakReference解决方法)来说明
为什么 要使用它

AsyncTask

更新:

我创建了一个github项目,并提供了一个下载示例,该示例

IntentService
用于另一个SO问题(如何修复android.os.NetworkOnMainThreadException?),但我认为在这里也很重要。它具有附加的优势,即通过
onActivityResult
旋转返回结果时,在旋转设备时正在进行的下载将传递给重新启动的
Activity



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/494881.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号