美文网首页
Android 优化

Android 优化

作者: 老北瓜 | 来源:发表于2020-03-02 20:30 被阅读0次

    Android 内存优化
    内存溢出 , 内存泄漏 , 内存泄漏过多就导致内存溢出

    Android 系统垃圾回收机制
    内存管理机制: Low Memory killer
    最理想的状态,就是用完了就回收
    实际情况 ,懒人机制,当新的进程需要使用时,内存不够了才去回收
    隐患: GC出发之后,所有进程都会暂停

    内存:
    Android 基于lInux, app 运行在沙箱机制,就是一个app独立运行咋一个虚拟机中,及时出错了也不会影像系统,运行的 过程叫做进程。

    adb shell -> ps 会打印出所有的进程
    -> sumpsys meminfo 包名 打印对应进程的内存情况

    application 主进程 :

    getApplicationInfo().packageName.equals(getCurProcessName(getApplicationContext())){
    // 可以进程一些任务的初始化
    }
    

    //内存获取
    ActivityManager am = getSystemService(ACTIVITY_SERVICE);
    //最大内存
    int max = am.getMemoryClass();
    // 开启硬件加速后的最大内存
    int large = am.getLargeMemoryClass();
    也可以在清单文件的 <Application> 中添加 android:largeHeap="true"

    Low memory Killer : app启动和销毁
    app的启动和销毁管理机制 : Activity栈 ,先进先出,系统保护机制 -> Lru Cache (缓存淘汰机制)

    // 获取运行时内存
    int total = Runtime.getRuntime().totalMemory() *1.0f /(1024 *1024);
    也可以通过使用工具来查看内存情况。

    内存优化:
    1, 良好的编码习惯
    2, 通过内存管理工具 Mat 查看内存情况
    可以 通过 MAT 工具下载 hprof log日志分析, 使用 sdk/platform-tools/hprof-conv 工具转换

    leakCanary 库检测内存

    布局性能优化:
    Layout Inspector 检测嵌套
    优化手段:
    include
    merge
    ViewStub

    Android 启动优化
    冷启动
    重启之后第一次启动,首次安装等没有缓存

    热启动
    关闭了app再打开

    温启动
    切换到后台,大部分数据保留。

    检测app Activity 的启动时间
    1, Shell

     ActivityManager - > adb shell am start -S -W 包名/ 包名+Activity路径
    

    2, Log

    ActivityManager 增加了Log  TAG =  displayed
    

    主要是针对冷启动的优化:
    冷启动经过的步骤:
    1,第一次安装,加载应用程序并且启动
    2,启动后显示一个空白的窗口 getWindow(), setWinsoeBackground()
    3, 启动/创建应用进程
    App内部:
    1,创建app对象/application对象
    2,启动主线程(Main/UI Thread)
    3, 创建应用入口 / Launcher
    4, 填充ViewGroup中的View
    5, 绘制View measure - > layout -> draw
    优化的手段:
    1,视图优化

    1, 设置主题透明 
    
        theme 中添加  
        <item name = “android:windowIsTranslucent”>true</item>
    
     2, 设置启动图片   ·······setWindowBackground();
        在启动后添加一个窗口时不让它空白,提前设置一张静态图片
    
        <item name="android:windowBackground">@drawable/ic_launcher_background</item>
        <item name="android:windowDrawsSystemBarBackgrounds">false</item>
    

    2,代码优化

         1,  优化Application , 不要负担太多工作
         2,布局优化,不要繁琐的布局
         3,阻塞UI 线程的操作  要不得
         4, 加载Bitmap大图 尽量去压缩
         5,其他一些占用主线程的操作。
    

    Application的优化

    /**
        * Application 的优化
        * 1, 必要的组件可以放在MainActivity 中去初始化
        * 2,如果必须要在Application 中初始化的组件,尽可能延时
        * 3,非必要的组件,可以放在子线程中去做。
        */
       @Override
       public void onCreate() {
           super.onCreate();
           context = this;
           
    
           new Thread(new Runnable() {
               @Override
               public void run() {
                   // 做一些初始化的工作
                  
               }
           }).start();
    
           new Handler().postDelayed(new Runnable() {
               @Override
               public void run() {
                   // 或者在这里做一些初始化的工作;
                   //Bmob 初始化
                   BMobManager.getInstance().initBMob(MeetApplication.this);
               }
           }, 1500);
       }
    

    相关文章

      网友评论

          本文标题:Android 优化

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