1.0 adb测试启动时间

iOS启动时间GSEventRunModal 启动时间英文_ide


解释一下 thistime 就是最后一个activity启动的时间

totaltime就是 冷启动所花费的时间

waittime就是等待上一个应用结束后加上启动的时间 所有会长一点

1.2 手动打点,测试启动时间

通过log来测试 方便带到线上 以activity绘制第一个条目为目标下onpreviewdraw 添加监听 当window开始绘制view
时再删除

public void onBindViewHolder(@NonNull final ViewHolder holder, int position) {
if (position == 0 && !mHasRecorded) {
            mHasRecorded = true;
            holder.layout.getViewTreeObserver()
                    .addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
                        @Override
                        public boolean onPreDraw() {
                            holder.layout.getViewTreeObserver().removeOnPreDrawListener(this);
                            LogUtils.i("FeedShow");}
                            }
   }}

2.0 查看具体进程启动时间

2.1 TraceView
  • 图像的形式展现时间和调用栈
  • 信息全面 保护所有线程
    !!!打开安卓文件夹后查看

    大致上长这样
  • 运行开销大
  • 会影响应用速度,带偏优化方向
2.2 systrace

一个轻量级的查看进程的所耗费时间的工具 支持python2.7

可以使用python代码来查看

如果查看有误,请点这里,帮助文档

iOS启动时间GSEventRunModal 启动时间英文_ide_02

轻量级 方便 可看cpu核心数 和线程详细情况 使用代码

TraceCompat.beginSection("nimade")
        Latte.instance.init(this)
            //假装网络延迟,方便观察loading
            .withLoaderDelayed(0)
            .withInterceptor(EmptyInterceptor())
            //之后使用我远程部署的测试数据
            .withApiHost("http://mock.fulingjie.com/mock/api/")
            .withIconTypeface(FontAwesome)
        TraceCompat.endSection();

然后去里面看使用时间

iOS启动时间GSEventRunModal 启动时间英文_ide_03

2.3-更优雅的去查看每个方法的详细启动时间

我们建议使用aop编程

  • 侵入性低

iOS启动时间GSEventRunModal 启动时间英文_ide_04

一个插件可以帮组我们快速的去写我们的代码

iOS启动时间GSEventRunModal 启动时间英文_加载_05

查看所有activity生命周期
具体使用请百度

@Around("call(* com.optimize.performance.PerformanceApp.**(..))")
    public void getTime(ProceedingJoinPoint joinPoint) {
        Signature signature = joinPoint.getSignature();
        String name = signature.toShortString();
        long time = System.currentTimeMillis();
        try {
            joinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        LogUtils.i(name + " cost " + (System.currentTimeMillis() - time));

3.0 优化小技巧

iOS启动时间GSEventRunModal 启动时间英文_启动时间_06

override fun onCreate(savedInstanceState: Bundle?) {
        setTheme(R.style.AppTheme)
        super.onCreate(savedInstanceState)
        supportActionBar?.hide()
    }
<style name="AppTheme.Launcher" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowBackground">@mipmap/launcher</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    </style>

3.2 异步加载 ,跑满cpu 别浪费cpu的核心数 —

加快启动
可以使用线程池,把在application里面要初始化的东西开异步线程,并发 会加快启动速度
建议使用启动器 可以合理运用我们的手机的核心数 ,且 可以避免遇到哪些需要依赖 其他方法的情况,
还有些是一定要初始化好,主线程才能正常运行的。

3.3 延迟加载-- 加快启动

一些不需要一定在启动就完成的东西,就等到启动后去加载

3.4 懒加载 —加快启动

懒加载就是如果地图只在一个地方用到 ,就在那一个地方加载,不用再application里面加载
其他的方法—可以参考
  1. 提前异步类加载—开线程加载可能要用到的类 ,用到的时候就快了 使用连接
  2. 启动时间抑制GC
  3. cpu锁频