基础知识
Droid-Fu 的最大优势是他提的应用生命周期帮助类。如果你正在开发一款Android应用,而它的主要任务是运行后台任务,例如从web上抓取数据,你肯定会在你的应用中使用Droid-Fu。
讨厌的AsyncTask
关于此话题,我已在两篇文章讨论过。第三次,我终于找到了优雅的解决办法。我们先来看看AsyncTask的问题吧:第一,AsyncTask是什么?它是一个执行大开销操作的帮助类。如果你正在开发一个需要访问web服务端的手机应用,很可能你已经使用过它了。
其基本思路是:发起一个异步任务,当任务线程执行过程中,显示一个漂亮的进度框,当任务将结果返回到Activity时进度框关闭。酷,但是如果用户决定旋转屏幕,可异步任务还在运行怎么办(屏幕旋转当前的Activity会完成整个一轮生命周期。然后重新创建,回调onCreate()方法。)?或是一个电话打进来,打断应用,Android决定将该应用进程杀死怎么办?这两种动作都会中断activity,当下次继续使用该应用时会recreate该Activity。很不幸,AsyncTask仍旧在运行,并且保留一个指针指向老的Activity,因为重启的Activity在内存中式完全不同的一个对象(并且还会执行Activity的onCreate(),就好像Activity是第一次启动一样)。我不确定AsyncTask是否还会将结果返回给老的Activity对象(如果是弱引用,可能它已经被回收),但是无论如何,新的Activity不会接收到该数据,因为完全是一个新的Activity实例。
现在,人们可以说:好的,就再做一次同样的工作,重新发送请求。是的,你可以这样做。但这是浪费,真的,让你觉得自己愚蠢,不是吗?另外,如果用户触发一个Web服务请求,然后翻转屏幕,发现不是自己想要的,又翻转回来,那么你的请求被发送平行的3倍。难道这就是你想要什么?大概不会。
BetterAsyncTask来救援
还好有Droid-Fu,他为我们提供了一个解决方案:BetterAsyncTask! (我是个懒惰的人,我不能拿出一个更好的名称了)。它的行为完全一样AsyncTask(事实上,这是一个AsyncTask),但它为你做一些额外的工作:首先,它会记录当前活动的实例,如果该实例改变,将发布的数据返回到新的实例。换句话说,你可以派遣你的任务,并且随意的来回翻转屏幕,BetterAsyncTask仍然会将任务的结果返回给当前的活动实例。换句话说,任务永远只运行一次。
有一个问题,由于BetterAsyncTask没有办法找出哪一个是其当前活动的实例,它依赖于一个助手:DroidFuApplication。这个类是Application的子类,如果你想使用BetterAsyncTask,你的应用程序从该类派生的,否则它不会工作。这是因为DroidFuApplication保留了活动实例的弱映射,当一个BetterAsyncTask完成后,它会通过您的Application获取Activity实例。
你所需做的仅仅是发起一个任务:
public class MyActivity extends BetterDefaultActivity {
protected void onResume() {
super.onResume();
if (isLaunching()) { // this is explained further down this article
MyBetterAsyncTask task = new MyBetterAsyncTask(this);
task.execute(someData);
}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
结尾
我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。
领取方式:关注+点赞+点击我的GitHub 免费获取!
的时间来学习。**