首页 文章详情

前有iOS,后有鸿蒙,Android要靠什么来稳住地位?

刘望舒 | 175 2022-04-24 16:09 0 0 0
UniSMS (合一短信)

IOS手机系统王者的地位一直稳如老狗,Android虽然一直在完善,但目前仍然在很多方面难以超越IOS,被拿捏得死死的。新贵鸿蒙作为一款发布才 2年时间的国产操作系统,其技术优越性也是崭露头角,尽管目前的鸿蒙 OS 生态不够完善,较苹果 iOS 和安卓仍存在一些差距,但随着时间推移,这些困难终将被克服。

那么问题来了,Android开发者们该如何在这个系统中步步为营,才能争取到更多用户的芳心?答案只有一个:性能优化。一款产品的性能优化做的好,拥有超顺滑的操作流畅度,才能让精心设计的功能得到更好的展现。目前各大厂也是对性能优化人才求贤若渴。

在性能优化中,大家可能会比较关注UI界面优化、耗损(电量,流量)优化,但其中内存优化才是命门所在。很多时候由于项目需要,大家都是拼命的加班加点的赶进度,为了追求效率很多代码可能就写的不(放)够(飞)规(自)范(我),从而造成内存泄漏,在试运行阶段bug不断OOM层出不穷。

内存泄漏基本由以下原因造成:
  • 单例造成的内存泄漏单例的静态特性导致单例的生命周期和应用的生命周期一样长,这就说明如果一个对象已经不需要使用了,而单例对象还持有该对象的引用,那么这个对象将不能被正常回收,这就导致了内存泄漏。

  • 非静态内部类创建静态实例造成的内存泄漏在启动频繁的Activity中,为了避免重复创建相同的数据资源,就在Activity内部创建了一个非静态内部类的单例,非静态内部类默认会持有外部类的引用,而又使用了该非静态内部类创建了一个静态的实例,该实例的生命周期和应用的一样长,导致该静态实例一直会持有该Activity的引用,导致Activity的内存资源不能正常回收。

  • Handler造成的内存泄漏平时在处理网络任务或者封装一些请求回调等Api都会借助Handler来处理,对于Handler的使用代码编写一不规范即有可能造成内存泄漏。

  • 线程造成的内存泄漏

    //——————test1
    new AsyncTask<Void, Void, Void>() {
    @Override
    protected Void doInBackground(Void... params) {
    SystemClock.sleep(10000);
    return null;
    }
    }.execute();
    //——————test2
    new Thread(new Runnable() {
    @Override
    public void run() {
    SystemClock.sleep(10000);
    }
    }).start();

    异步任务和Runnable都是一个匿名内部类,因此它们对当前Activity都有一个隐式引用。如果Activity在销毁之前,任务还未完成, 那么将导致Activity的内存资源无法回收。

  • 资源未关闭造成的内存泄漏:BraodcastReceiver,File,Cursor,Stream,Bitmap等资源的使用,应该在Activity销毁时及时关闭或者注销,否则这些资源将不会被回收,造成内存泄漏。

  • 很多朋友表示,内存泄漏我用LeakCanary可以纠察,但纠察之后为什么还是OOM?


没有内存泄漏,为何仍旧OOM?

没有内存泄漏却仍然OOM,多半是内存抖动在作祟。它会导致程序的莫名卡顿,甚至Crash和OOM很多开发者面对这种问题毫无头绪,甚至不知道什么是内存抖动:

  • 内存的频繁分配和回收会导致内存不稳定,就会出现内存抖动,它的通常症状为频繁GC、内存曲线呈锯齿状
  • 伴随着频繁的GC,导致GC线程采集垃圾的时候会把项目中的主线程、其他工作线程都被挂起,用户的操作交互会有无反应的状态,这就是卡顿 。
  • 内存不连续,由频繁申请回收内存(内存抖动)导致大量内存碎片的产生,引起在创建对象时(如数组、字符串)没有足够连续的内存空间引起OOM


内存抖动的危害不可忽视,程序莫名卡顿甚至Crash都可能是因为内存抖动造成的。很多开发者对此毫无头绪,甚至对内存抖动一无所知。对于内存泄漏目前有快手KOOM、微信Matrix等等工具帮助大家排查内存泄漏问题,然而并没有一款工具能够方便帮助大家解决内存抖动,想要解决内存抖动,必须要深入学习其中的底层原理


为了帮助大家更好地学习内存性能优化,解决内存泄漏、抖动的问题,我们特邀腾讯课堂的Lance位老师,在4月20日-21日为大家进行详细的讲解:


4月20日 -2月21日,每晚20:00-22:00
前爱奇艺高级工程师【Lance老师】
联手倾心打造
原价 ¥199,限时 免费 立刻学习!

▲微信号:xiangxuekl

长按扫码添加客服,

锁定 「免费」 名额
【直播+录播】【笔记课件】+【源码】
仅前 300 人有效,先到先得!


直播学习中加赠-【Android性能优化-大厂面试高频问题实战解析】


扫码即可领取资料

为什么推荐你学
无论是实际项目需求,还是大厂面试,性能优化都是Android开发者必须要切实掌握的,且内存优化更是重中之重,不会内存优化,你根本无法经手面试官的“严刑拷打”

4月20日-21日,2天时间,Lance老师带领大家学习内存优化,帮大家系统梳理源码的学习路线、以及高效的学习方法,并且结合实战带你分析相关高频面试问题。听课后,还能获取互联网环境中,Andorid核心技术路线图,里面的内容和方向,让你学习起来更明确,更体系:



参加直播听课还有机会获得《Android架构开发手册》:



独特训练营实战服务


课堂福利:
1. 限时0元秒送性能优化系列课程
2. 提供学习直播+预习资料+源码+老师课后答疑
3. 赠送课程学习资料


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter