美文网首页性能优化
性能优化(一,app启动优化)

性能优化(一,app启动优化)

作者: 腊鸡程序员 | 来源:发表于2019-04-24 15:36 被阅读0次
    app启动流程简介

    app的启动流程,即从安卓系统启动,到我们手指点击应用图标,再到app的第一帧显示到手机屏幕,这其中安卓系统是怎样一步步开启app进程,打开app启动页的.这其中涉及很复杂,我们在这只做简单介绍.

    系统启动
    image.png
    1. 打开电源 引导芯片代码加载引导程序Boot Loader 到RAM中去执行
    2. BootLoader把操作系统拉起来
    3. Linux内核启动开始系统设置,找到一个init.rc文件启动初始化进程
    4. init进程初始化和开启属性服务,之后开启Zygote(孵化器)进程
    5. Zygote开始创建JVM并注册JNI方法,开启SystemService
    6. SystemService开启Binder线程池并启动SystemServiceManager,并开启各种服务
    7. AMS启动Launcher
    Launcher启动
    image.png

    当我们用手点击一个应用图标时,就到了这个类 public static final Launcher extends Activity.
    执行onClick(View view)方法,会把应用的相关信息传入.
    先获取一个intent,-->startActivitySafely(v,intent,tag)-->startActivity(v,intent,tag)-->startActivity(intent).
    startActivty(intent)会开启一个App进程.
    ActivityThread.java作为入口,用attach开启App,再加载application和activityThread.attach(this)-->
    mgr.attachApplication(mAppThread)会通过远端进程去回调,
    private void handleBindApplication(AppBindData data),
    创建Application对象
    Application app = data.info.makeApplication
    myInstrumentation.callApplicationOnCreate(app);-->
    app.onCreate();

    黑白屏问题

    一些app启动时.会存在几秒钟的黑屏或白屏,然后才会加载启动页.

    解决方案:
    1.将黑白屏换成广告页

     </style>
        <style name="AppTheme.Launcher1">
        <item name="android:windowBackground">@drawable/bg</item>
       </style>
    
    <activity
                android:theme="@style/AppTheme.Launcher1"
                android:name=".activity.SplashActivity"
                android:screenOrientation="portrait"
                >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
            </activity>
    
      @Override
        protected void onCreate(Bundle savedInstanceState) {
    //        setTheme(R.style.AppTheme);
            super.onCreate(savedInstanceState);
           setTheme(R.style.AppTheme_Launcher1);
    
        }
    
    

    2.将黑白屏设置成透明不可见

    <style name="AppTheme.Launcher1">
            <item name="android:windowBackground">@null</item>
            <item name="android:windowDisablePreview">true</item>
        </style>
    
    traceview使用

    1.将需要检测的代码用methodTracing包裹

     File file = new File(Environment.getExternalStorageDirectory(), "app1.trace");
            Log.i(TAG, "onCreate: " + file.getAbsolutePath());
            //把分析结果存在一个文件
            Debug.startMethodTracing(file.getAbsolutePath());
    
    /*******************************************
    *******************************************/
    
    Debug.stopMethodTracing();
    

    2.导出.trace文件
    adb pull /storage/emulated/0/app1.trace把文件拉出来分析
    把pull到电脑上的文件拖到AS中就可以分析了

    相关文章

      网友评论

        本文标题:性能优化(一,app启动优化)

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