Android的AsyncTask一直是初学者和专业开发人员的必备工具

多年来,Android的AsyncTask一直是初学者和专业开发人员的必备工具。如果您曾经在Android上搜索过有关各种异步逻辑的教程,那么很可能前几条结果建议使用AsyncTask。这也不是一个随机选择。创建AsyncTask最初是为了简化后台操作和应用程序UI之间的交互。有一段时间,它做得很好。AsyncTask确实确实有助于简化异步任务。不过,这并不意味着它是完美的。

许多应用程序需要做的一件事是从远程服务器获取信息。由于网络请求可能需要一段时间,因此异步执行通常很重要,这样它们才不会导致应用程序冻结。操作完成后,即可更新UI。但是,有可能在网络请求完成时,UI的相关部分不再存在,这可能导致崩溃或其他错误。尽管AsyncTask确实简化了整个过程,但它并不尊重Android应用程序的生命周期。这意味着在UI更改之后,没有内置保护可防止AsyncTask完成。当然,可以手动添加检查和其他保护,但这会增加很多重复代码(又名“样板”)。由于这样的问题,AsyncTask有点被淘汰。

好吧,似乎Google的意见是AsyncTask不能节省。在最近的AOSP提交中,不赞成使用AsyncTask,理由是与我刚才谈到的原因类似。尽管这对于最终用户而言并不是真正的巨大变化,但对于开发人员而言可能意味着很多。如果您要维护较旧的代码库,或者刚开始使用Android中的异步任务,则可能需要更改一堆代码。幸运的是,谷歌并没有让开发人员灰心丧气。

由于AsyncTask的局限性,替代方案随着时间的流逝而出现,例如RxJava和Kotlin的新(ish)Coroutines库。这些替代方法往往比AsyncTask具有更大的灵活性和功能,因此已经获得了相当多的普及。在AsyncTask的弃用通知中,Google建议使用Java的Concurrency框架或Kotlin Coroutines。

就个人而言,我已经开始使用Kotlin的Coroutines,并且没有回头。当然,我知道许多人已经围绕AsyncTask紧密集成了他们的代码,因此这可能至少给他们带来一点不便。很好的是,有很多可供选择的选择。更改代码可能很烦人,但至少这次是可能的。

如果需要更多详细信息,可以在此处签出提交。该提交已于今天早些时候合并,除非正在准备发布Android维护版本,否则我们将在明年的Android 11中看到这一更改。

(0)
上一篇 2022年4月7日
下一篇 2022年4月7日

相关推荐