1 如何优化安卓应用启动速度?
延迟非关键初始化(首帧后)
避免主线程 I/O
轻量首屏布局,避免嵌套布局
图片与数据懒加载
安卓中常见的调试方式有哪些?
1)最基本的是 Logcat + 断点调试;
2)界面问题用 Layout Inspector / GPU Overdraw;
3)性能问题用 Android Profiler、StrictMode、Systrace;
4)内存问题靠 LeakCanary / hprof;
5)网络问题用 抓包工具 / Flipper;
常见的布局方式有哪些?
LinearLayout:简单、常用于小规模线性排布;嵌套多层时性能差,测量耗时;
RelativeLayout:相对布局
ConstraintLayout:约束布局,减少嵌套、性能更好、可视化编辑支持强,可以设计复杂 UI 界面;
FrameLayout:叠加布局
TableLayout:表格布局
GridLayout:网格布局
App 启动流程
用户点击 App 图标:
Launcher(桌面应用,本质上也是一个 Android 应用)监听到点击事件
通过 Binder 调用 ActivityManagerService (AMS),请求启动目标应用的入口 Activity
AMS 启动应用
AMS 收到请求后,会检查应用进程是否存在;
如果应用进程已经存在 → 直接通过 Binder 通知应用进程启动 Activity;
如果应用进程还没启动 → 需要通知 Zygote fork 一个新进程;
Zygote fork 应用进程
AMS 通过 Socket 向 Zygote 进程 发送“创建应用进程”的命令;
Zygote 进程调用
fork()
,复制自身,生成一个新的 App 进程;新的进程里会启动
ActivityThread
,这是 App 的主线程(UI 线程);
Application 初始化
在新进程中,
ActivityThread
会通过 Binder 和 AMS 建立连接;ActivityThread
调用handleBindApplication()
创建 Application 实例;
启动 Activity
AMS 再次通过 Binder 调用应用进程的
ActivityThread
,要求启动具体的入口 Activity。