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 启动流程

  1. 用户点击 App 图标:

    • Launcher(桌面应用,本质上也是一个 Android 应用)监听到点击事件

    • 通过 Binder 调用 ActivityManagerService (AMS),请求启动目标应用的入口 Activity

  2. AMS 启动应用

    • AMS 收到请求后,会检查应用进程是否存在;

    • 如果应用进程已经存在 → 直接通过 Binder 通知应用进程启动 Activity;

    • 如果应用进程还没启动 → 需要通知 Zygote fork 一个新进程;

  3. Zygote fork 应用进程

    • AMS 通过 SocketZygote 进程 发送“创建应用进程”的命令;

    • Zygote 进程调用 fork(),复制自身,生成一个新的 App 进程;

    • 新的进程里会启动 ActivityThread,这是 App 的主线程(UI 线程);

  4. Application 初始化

    • 在新进程中,ActivityThread 会通过 Binder 和 AMS 建立连接;

    • ActivityThread 调用 handleBindApplication() 创建 Application 实例;

  5. 启动 Activity

    • AMS 再次通过 Binder 调用应用进程的 ActivityThread,要求启动具体的入口 Activity。