美文网首页
Android 启动优化

Android 启动优化

作者: itwillrain | 来源:发表于2020-11-24 16:52 被阅读0次

    一、 启动白屏优化

    解决启动白屏问题
    再启动app时展示一张静态图 ,实现方法是 给splash页面设置theme主题 ,主题设置background 背景图代替白屏页,展示完成背景图和splash之后, 在mainactivity oncreat()之前把系统appTheme设置回来。
    步骤:
    定义闪屏图
    定义闪屏主题
    设置主题
    换回主题
    1 定义闪屏图
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@color/white" />
    <item>
    <bitmap
    android:gravity="fill"
    android:src="@drawable/splash_bg" />
    </item>
    2 定义splash页主题
    <style name="SplashTheme" parent="Theme.MaterialSheetFab.Base">

    <item name="colorPrimary">@color/transparent</item>
    <item name="colorPrimaryDark">@color/transparent</item>
    <item name="colorAccent">@color/main_color</item>
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:selectableItemBackgroundBorderless" tools:targetApi="lollipop">@null </item>
    </style>
    </layer-list>
    3 是在清单文件中设置 Theme。
    <activity
    android:name=".activity.SplashActivity"
    android:configChanges="orientation|keyboardHidden|screenSize"
    android:exported="true"
    android:theme="@style/SplashTheme"
    android:launchMode="singleTask"
    android:screenOrientation="portrait">
    4 第四步是在调用 super.onCreate 方法前切换回来
    @Override
    public void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme);
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my_home);
    checkNotifyPermisson();
    }
    二、冷启动时优化方法
    测试首屏启动耗时 adb命令
    adb 命令 首屏启动时间测量
    adb shell am start -W com.xxx.xxx(包名)/com.xxx.xxx.activity.SplashActivity(splash页全路径)

    优化方法 大致思路1 把需要启动的第三方sdk init代码放在子线程或者intentservice 中异步初始化 ,同时还要保证在用到第三方sdk方法时sdk已经初始化完成 不影响方法使用
    思路2 延迟第三方初始化 handler.postdelay() 进行延迟,但是延迟时间不好确定
    优化方法按照思路1 利用第三方库LaunchStarter进行初始化sdk
    public class MyApplication extends Application {

    private static final String TAG = "MyApplication";
    
    @Override
    public void onCreate() {
        super.onCreate();
        
        TaskDispatcher.init(getBaseContext());
        TaskDispatcher taskDispatcher = TaskDispatcher.createInstance();
    
        // task2依赖task1;
        // task3未完成时taskDispatcher.await()处需要等待;
        // test4在主线程执行
        //每个任务都耗时一秒
        Task1 task1 = new Task1();
        Task2 task2 = new Task2();
        Task3 task3 = new Task3();
        Task4 task4Main = new Task4();
    
        taskDispatcher.addTask(task1);
        taskDispatcher.addTask(task2);
        taskDispatcher.addTask(task3);
        taskDispatcher.addTask(task4Main);
    
        Log.i(TAG, "onCreate: taskDispatcher.start()");
        taskDispatcher.start();//开始
    
        taskDispatcher.await();//等task3完成后才会往下走
        Log.i(TAG, "onCreate: end.");
    }
    

    作者:胡飞洋
    链接:https://juejin.cn/post/6854573215474253838
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    参考:https://juejin.cn/post/6844903919580086280
    启动器 https://github.com/zeshaoaaa/LaunchStarter

    相关文章

      网友评论

          本文标题:Android 启动优化

          本文链接:https://www.haomeiwen.com/subject/joaiiktx.html