美文网首页
Profile检测的高级使用与启动优化

Profile检测的高级使用与启动优化

作者: 逐鹿者不见山 | 来源:发表于2020-11-11 02:06 被阅读0次

    Profile有什么用?
    它可以使用普通的实时检测内存、CPU、NETWORK的使用情况。

    也可以用它的高级用法,来检测各个方法的启动速度。

    Profile的高级用法,默认只有Android8.0之后才能使用,但是我们在Android8.0之前也可以操作使用。

    Profile的高级用法中,有四个类型:
    类型 作用
    Call Chart 根据时间线查看调用栈,便于观察每次调用是何时发生的
    Flame Chart(就是我们的火焰图) 根据耗时百分比查看调用栈,便于发现总耗时很长的调用链
    Top Down Tree 查看记录数据中所有方法调用栈,便于观察其中每一步所消耗的精确时间。
    Bottom Up Tree 相对于Top Down Tree,能够更方便查看耗时方法如何被调用

    Android8.0+使用步骤:

    点击app,选择Edit Configurations


    image.png

    [图片上传中...(image.png-45eaf0-1605028914804-0)]
    到了Run/Debug Configurations页面,点击app,再点击Profiling,然后勾选Start recording CPU activity on startup,然后选择想要监控的内容,最后应用


    image.png
    然后点击Profile 'app'即可运行
    image.png

    运行出来之后,可以在自己想要的位置点击停止监测,即可生成相应的内容


    image.png

    最后生成的内容


    image.png

    Android8.0-使用步骤:

    因为要自己生成文件,注意要先去申请相关权限:

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    在开始检测的地方,添加Debug.startMethodTracing("enjoy")

    public class MyApplication  extends Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
            Debug.startMethodTracing("enjoy");
        }
    }
    

    在结束检测的地方添加:

    public class MainActivity extends AppCompatActivity {
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        @Override
        public void onWindowFocusChanged(boolean hasFocus) {//onWindowFocusChanged表示获取到焦点,即页面可交互
            super.onWindowFocusChanged(hasFocus);
            Debug.stopMethodTracing();
        }
    }
    

    然后直接运行app即可,运行结束之后,我们可以直接在AS的右下角找到并点击DeviceFileExplorer,然后可以得到我们的文件列表,从文件列表的SDcard文件夹中得到生成的enjoy.trace,双击即可得到我们的内容


    image.png

    双击后即可得到我们想要的内容


    image.png

    StrictMode

    StrictMode是一个开发人员工具,它可以检测出我们可能无意中做的事情,并将它们提请我们注意,以便我们能够修复它们。

    StrictMode最常用于捕获应用程序主线程上的意外磁盘或网络访问。帮助我们让磁盘和网络操作远离主线程,可以使应用程序更加平滑、响应更快

    一般写在Application.onCreate的super.onCreate前面

    public class MyApplication extends Application {
    @Override
    public void onCreate() {
    if (BuildConfig.DEBUG) {
    //线程检测策略
    StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
    .detectDiskReads() //读、写操作
    .detectDiskWrites()
    .detectNetwork() // or .detectAll() for all detectable problems
    .penaltyLog()
    .build());
    StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
    .detectLeakedSqlLiteObjects() //Sqlite对象泄露
    .detectLeakedClosableObjects() //未关闭的Closable对象泄露
    .penaltyLog() //违规打印日志
    .penaltyDeath() //违规崩溃
    .build());
    }
    }
    

    相关文章

      网友评论

          本文标题:Profile检测的高级使用与启动优化

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