Android优化————启动优化(1),2024年最新入职3个月的Android程序员面临转正

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注Android)
img

正文

  • 其他耗时业务,算法节点

优缺点:

  • 精确,可上线
  • 修改成本高

3.AOP打点 加入aspectjx库,打印出Application,Activity的耗时时间,进行针对优化

根路径build.gradle中添加

classpath ‘com.hujiang.aspectjx:gradle-android-plugin-aspectjx:2.0.0’

app中build.gradle中添加

apply plugin: ‘android-aspectjx’

implementation ‘org.aspectj:aspectjrt:1.8.+’

使用如下:

@Aspect
public class LauncherAop {

@Around(“call(* com.jw.myapplication.MainActivity.**(…))”)
public void getTime(ProceedingJoinPoint joinPoint) throws Exception{
Signature signature = joinPoint.getSignature();
String name = signature.toShortString();
long time = System.currentTimeMillis();
try {
joinPoint.proceed();
} catch (Throwable throwable) {
throwable.printStackTrace();
}
Log.d("kangkang = ","kangaop = " +name+ " cost " + (System.currentTimeMillis() - time));
}
}

4.TraceView

代码中开启

Debug.startMethodTracing();
method();
Debug.stopMethodTracing();

生成.trace文件,导入Android Studio,使用profile中的cpu查看文件生成的火炬图

优化方案
  1. 主题切换

设置自定义主题设置背景图,执行到onCreate方法后替换为Activiy的真实布局 2. 初始化分化 image

  • MultiDex以及Tinker的初始化操作
  • Application中的第三方组件的初始化
  1. 异步初始化组件,不阻塞主线程,设置异步线程为THREAD_PRIORITY_BACKGROUND
  2. 延迟初始化操作,再线程空闲时加载,
  3. EventBus、ota、bugly、migu、Linphone、Butterknife、地图、IOT
  • 设置线程池初始化任务
  1. 仿照AsyncTask新建线程池,核心线程数为2-4个
  2. 任务使用该线程池加载,如有顺序,使用CountDownLatch进行处理
  • 部分任务可以延迟加载,使用IdleHandler,在主线程空闲时加载
  • Multidex预加载优化
优化方案

在使用Aspect进行时间的监测时,发现Application和Activity中的初始化三方进程耗费了大量时间,在初始化时,我们开启了百度OTA服务,Bugly监测服务,咪咕音乐服务,阿里IOT服务,日志监测服务,Linphone语音服务,Ifly语音服务等,这些串行起来是比较耗时的。
所以我们采用开启一个线程池的方案,在子线程启动这些服务,对于OTA,IOT,日志检测,Linphone等服务不需要在第一时间初始化,所以放到线程池中根据执行顺序分别初始化。但是对于咪咕、Ifly和bugly来说,需要第一时间初始化,才能进行后边的逻辑,所以我们将这些服务优先初始化,并联合CountDownLatch,当必须的服务初始化完成后,才进入下面的流程。
对于必须要在主线程进行初始化的操作,可能会造成主线程繁忙卡顿,所以使用IdleHandler方法,在主线程空闲时执行,
具体优化了40%,由2.3s压缩到1.4s。
如果由任务A,B,C,D,要求C在A之后执行,D在B之后执行,那么直接将A,C合并为一个任务,放入线程池中运行,B、D合并为一个任务,放入线池程中执行,如需决定AC和BD的顺序,那么可以按照AC、BD的顺序依次放入子线程中。
项目地址:github.com/hanmingkang…

如何对IDLEHandler进行顺序划分?比如先执行B,在执行A

规划一个空闲队列,在Handler空闲时进行处理,每次出队优先级最高的,其他等到下次空闲在执行

2-4是怎么计算的?

最后

上面这些公司都是时下最受欢迎的互联网大厂,他们的职级、薪资、福利也都讲的差不多了,相信大家都是有梦想和野心的人,心里多少应该都有些想法。

也相信很多人也都在为即将到来的金九银十做准备,也有不少人的目标都是这些公司。

我这边有不少朋友都在这些厂工作,其中也有很多人担任过面试官,上面的资料也差不多都是从朋友那边打探来的。除了上面的信息,我这边还有这些大厂近年来的面试真题及解析,以及一些朋友出于兴趣和热爱一起整理的Android时下热门知识点的学习资料

部分文件:


网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注Android)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

t0GGH-1713709069054)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 24
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值