2024年Android最全Android---性能优化方案分享,java开发英文面试自我介绍

文末

架构师不是天生的,是在项目中磨练起来的,所以,我们学了技术就需要结合项目进行实战训练,那么在Android里面最常用的架构无外乎 MVC,MVP,MVVM,但是这些思想如果和模块化,层次化,组件化混和在一起,那就不是一件那么简单的事了,我们需要一个真正身经百战的架构师才能讲解透彻其中蕴含的深理。

移动架构师

系统学习技术大纲

一线互联网Android面试题总结含详解(初级到高级专题)

image

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

前言

性能优化的过程分两部分:

  • 发现性能瓶颈
  • 制定方案,解决性能问题

解决性能问题的方案需要具体情况具体分析,并没有完全固定的路子,更多的是靠经验的积累,本文不做涉及。但是发现性能瓶颈确实有着固定的方法。本文主要介绍 如何找到性能瓶颈 。

如何找到性能瓶颈

常用的性能检测工具是traceview,集成于 Android Device Monitor 中。从Android Studio3.0开始, Android Device Monitor 被废弃,取而代之的是 Android Profiler ,其中提供了 Memory Prodiler 、CPU Profiler、Network Prodiler三大功能。

内存优化(包括内存泄漏)常用的是 MAT 或者 LeakCanary ,而 Memory Profiler 相当于将 MAT 的简化版功能集成到 AS 中。相对的在性能优化方面,CPU Profiler 相当于将 traceview 的功能集成到了 AS 中。
所以,使用AS3.0之前版本的,可以使用traceview,而使用AS3.0以后版本的,除了traceview,还可以选择CPU Profiler。
如果想追踪系统进程的详细数据,以解决帧引起的界面卡顿等问题,可以使用 systrace ,本文不做涉及。

traceview 使用方法

使用 traceview 需要首先使用 Debug 类进行 插桩 ,当应用执行到被插桩的代码时就会在手机sdcard中自动生成 .trace 文件,之后使用 traceview 或者 AS(3.0以上版本)打开文件即可。

一、插桩

插桩需要使用到 Debug 类,并且会在 sdcard 中生成 .trace 文件,所以你必须首先保证你的应用具有写外部存储( WRITE_EXTERNAL_STORAGE )的权限。

在想要跟踪的代码逻辑开头和结尾处分别插桩:

// Starts recording a trace log with the name you provide. For example, the

// following code tells the system to start recording a .trace file to the

// device with the name “sample.trace”.

Debug.startMethodTracing(“sample”);

// The system begins buffering the generated trace data, until your

// application calls stopMethodTracing(), at which time it writes

// the buffered data to the output file.

Debug.stopMethodTracing();

生成的 .trace 文件会被保存在固定目录下,与 getExternalFilesDir() 返回的目录相同,即 /sdcard/Android/data/[YOUR_PACKAGE_NAME]/files 下。
请注意,如果您的应用在未更改跟踪日志名称的情况下再次调用 startMethodTracing(),则会覆盖已保存至设备的现有日志。如果希望每次运行都保存至不同的日志文件,可以使用如下代码:

// Uses the SimpleDateFormat class to create a String with

// the current date and time.

SimpleDateFormat date =

new SimpleDateFormat(“dd_MM_yyyy_hh_mm_ss”);

String logDate = date.format(new Date());

// Applies the date and time to the name of the trace log.

Debug.startMethodTracing(

“sample-” + logDate);

如果系统在您调用 stopMethodTracing() 之前达到最大缓冲值,则会停止跟踪并向管理中心发送通知。 开始和停止跟踪的函数在您的整个应用流程内均有效。 也就是说,您可以在 Activity 的 onCreate(Bundle)

函数中调用 startMethodTracing(),在 Activity 的 onDestroy() 函数中调用 stopMethodTracing()。

二、查看 .trace 文件

插好桩后,安装应用并运行被检测部分的功能,然后就可以通过 AS 或者 traceview 查看文件了。

使用 AS 查看

在AS中点击 View - Tool Windows - Android File Explorer 打开 Android File Explorer :

在 /sdcard/Android/data/[YOUR_PACKAGE_NAME]/files 下即可找到生成的 .trace 文件,双击文件即可打开。

将 .trace 文件保存至电脑,直接拖入AS窗口,也可直接打开该视图。

在打开的视图中,左上方可以选择想要查看的线程。可以查看监控期间指定线程运行了多久、执行了哪些方法、每个方法执行了多久等等。

其中有4个名词需要解释一下:

  • **Wall Clock Time:**壁钟时间,表示实际经过的时间,即进入某个方法到退出该方法的时间,不考虑线程是活动还是休眠状态。

  • **Thread time:**线程时间,表示实际经过的时间减去线程没有消耗 CPU 资源(处于休眠)的时间部分。 对于任何给定函数,其线程时间始终少于或等于其壁钟时间。 使用线程时间可以让您更好地了解线程的实际 CPU 使用率中有多少是给定函数消耗的。

  • **Inclusive Time:**方法执行自己代码的时间 + 执行自己child方法的时间。

  • **Exclusive Time:**方法执行自己代码的时间。

使用 traceview 查看

要使用 traceview 查看,需要首先将 .trace 文件保存到电脑:

adb pull /sdcard/Android/data/[YOUR_PACKAGE_NAME]/files/sample.trace D:\Documents\sample.trace

打开 Android Device Monitor 。AS3.0以前的版本,就是LogCat所在的窗口,再切换一下tab页即可。AS3.0以后,进入 android-sdk/tools/ 路径,运行以下命令:

monitor

虽然 Android Device Monitor 的 DDMS 也有 File Explorer ,但是未 root 的手机,查看不到上述路径,因此只能将 .trace 文件保存到电脑查看。

在 Android Device Monitor 中,依次点击 File - Open File ,选择 .trace 文件路径即可打开:

内容与AS打开时类似,相差较大的主要是图标部分,没有AS的 Call Chart 直观形象。

其中也有4个概念:

**Cpu Time:**相当于AS中的 Thread time。
**Real Time:**相当于AS中的Wall Clock Time。
**Inclusive Time:**同AS一样。
**Exclusive Time:**同AS一样。

使用 AS 查看还是使用 traceview 查看

这个就见仁见智了,根据我个人使用的感觉来看,建议使用AS查看。原因有二:

AS更简单。不需要单独打开ADM,更不需要将 .trace 文件保存到电脑。

AS的调用图( Call Chart )更加直观,cpu时间的消耗一目了然。

Call Chart 的水平轴表示函数调用(或调用方)的时间段和时间,并沿垂直轴显示其被调用者。 下图展示了一个调用图表示例,并描绘了给定函数的 self time、children time 以及总时间的概念。

尾声

如果你想成为一个优秀的 Android 开发人员,请集中精力,对基础和重要的事情做深度研究。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。 整理的这些架构技术希望对Android开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。

这里,笔者分享一份从架构哲学的层面来剖析的视频及资料给大家梳理了多年的架构经验,筹备近6个月最新录制的,相信这份视频能给你带来不一样的启发、收获。

Android进阶学习资料库

一共十个专题,包括了Android进阶所有学习资料,Android进阶视频,Flutter,java基础,kotlin,NDK模块,计算机网络,数据结构与算法,微信小程序,面试题解析,framework源码!

大厂面试真题

PS:之前因为秋招收集的二十套一二线互联网公司Android面试真题 (含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。)

《2019-2021字节跳动Android面试历年真题解析》

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

需要这份系统化学习资料的朋友,可以戳这里获取

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

深入研究,那么很难做到真正的技术提升。**

需要这份系统化学习资料的朋友,可以戳这里获取

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

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值