淺析app啓動時間優化

1.0 adb測試啓動時間

在這裏插入圖片描述
解釋一下 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代碼來查看
如果查看有誤,請點這裏,幫助文檔
在這裏插入圖片描述

輕量級 方便 可看cpu核心數 和線程詳細情況 使用代碼

 TraceCompat.beginSection("nimade")
        Latte.instance.init(this)
            //假裝網絡延遲,方便觀察loading
            .withLoaderDelayed(0)
            .withInterceptor(EmptyInterceptor())
            //之後使用我遠程部署的測試數據
            .withApiHost("http://mock.fulingjie.com/mock/api/")
            .withIconTypeface(FontAwesome)
        TraceCompat.endSection();

然後去裏面看使用時間
在這裏插入圖片描述

2.3-更優雅的去查看每個方法的詳細啓動時間

我們建議使用aop編程

  • 侵入性低

在這裏插入圖片描述

一個插件可以幫組我們快速的去寫我們的代碼
在這裏插入圖片描述

查看所有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 優化小技巧

在這裏插入圖片描述

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鎖頻

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章