当前位置: 首页 > news >正文

朝西村小江网站建设北京网站设计推荐柚米

朝西村小江网站建设,北京网站设计推荐柚米,视频推广方式,学信网网站建设怎么搞App启动优化为什么要做App的启动优化#xff1f;网页端存在的一个定律叫8秒定律#xff1a;即指用户访问一个网站时#xff0c;如果等待打开的时间超过8秒#xff0c;超过70%的用户将会放弃等待。同样的#xff0c;移动端也有一个8秒定律#xff1a;如果一个App的启动时间…App启动优化为什么要做App的启动优化网页端存在的一个定律叫8秒定律即指用户访问一个网站时如果等待打开的时间超过8秒超过70%的用户将会放弃等待。同样的移动端也有一个8秒定律如果一个App的启动时间超过8秒或有明显的卡顿80%的用户将会退出应用并对程序员进行口吐芬芳。当然这是我瞎编的但却不代表是不存在的。最起码肯定会影响App在市场上的评分进而让更多的用户在对比过程中选择竞品。知道了启动优化的重要性那么接下来我们就来分析下如何优化App的启动本文内容主要分为以下三部分分析优化方向App应用主要有三种启动状态冷启动、热启动和温启动。1、 冷启动耗时最长也是主要的优化点恋爱前的女人冷启动前系统主要做了三件事加载并启动应用。在启动后立即显示应用的空白启动窗口。创建应用进程。创建应用进程后创建应用对象。启动主线程。创建主 Activity。扩充视图。布局屏幕执行初始绘制2、热启动耗时最短将activity从后台带到前台热恋中的女人3、温启动耗时较长重走了Actiivty的生命周期。结婚后的女人从应用的启动状态中我们可以分析得出剥除系统本身的任务动作外这部分我们是无法进行操作修改的其实我们的启动优化方向主要就是Application和Activity的生命周期、主视图的布局优化这部分我们放到UI优化系列来讲。相关数据测量优化App的启动速度前我们得先获取App的一些启动数据根据这些数据才能准确找到优化的点才能对优化后的操作做一个准确的评估。(下面的相关代码我将会拿之前的一个旧项目来做演示一是更贴近实际开发情况比demo更加直观二是顺手给优化了何乐而不为呢)获取启动时间adb命令法adb shell am start -S -W packagename/activity(含包名)ThisTime:最后一个 Activity 启动时间TotalTime:所有 Activity 启动耗时这里只启动了一个 MainActivity;WaitTime:AMS 启动 Activity 的总耗时adb 命令虽然简单好用但还是有不少缺点的只能线下使用而在实际开发过程中用户的启动时间才是最好的参考指标非精确的时间这里只是显示了 Activity 启动完毕的时间但对于用户的直观体验来说只有首页的数据展示出来才算是真正的启动完成。手动打点法public class LaunchTimer { private static long mTime; //开启时间 public static void startTime() { mTime System.currentTimeMillis(); } //结束时间 public static void endTime() { LoggerManager.d(启动时间 (System.currentTimeMillis() - mTime)); } }在Application类的attachBaseContext()方法中打入开始启动时间点protected void attachBaseContext(Context base) { super.attachBaseContext(base); LaunchTimer.startTime(); }在我们的首页第一条数据展示成功后打入结束时间点ps:网上很多文章都在onwindowfocuschanged方法中打入结束时间其实这个方法只是首帧时间并不代表我们的页面数据等全部展示出来了。我们做优化还是得以用户的实际体验来作为参考价值不能仅仅KPI化//是否已经记录启动时间 private boolean mIsRecord false; Override protected void convert(BaseViewHolder helper, final HomeListBean.DataBean item) { if (helper.getPosition() 1 !mIsRecord) { mIsRecord true; final View contentView helper.getView(R.id.home_item_rl); //监听第一条数据的绘制完成时间 contentView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { Override public boolean onPreDraw() { contentView.getViewTreeObserver().removeOnPreDrawListener(this); LaunchTimer.endTime(); return true; } }); } }运行我们的代码可以看到启动时间是3111毫秒正常来说是会比用adb命令打出的时间要长点。手动打点的好处可以线上使用统计真实用户的启动时间时间准确结合用户真实体验参考价值更高2、其他优化分析工具我经常使用的启动优化工具主要有Traceview(官方文档)和systrace(官方文档)Traceview虽然比较全面但性能消耗太大这里不做过多介绍有兴趣的朋友可以自行查看官方文档这里主要介绍systrace这个工具使用前需得先安装python。先打点public void onCreate() { super.onCreate(); //使用兼容的TraceCompat打入开始点 TraceCompat.beginSection(AppBegin); if (instance null) { instance this; } if (IS_DEBUG_ABLE) { initLogger(); } initBugly(); Tiny.getInstance().init(this);//初始化tiny图片压缩工具 initJPush(); initSkin(); RichText.initCacheDir(this);//设置缓存 initFragmentation(); MMKV.initialize(this); TraceCompat.endSection(); //使用兼容的TraceCompat记录结束点 TraceCompat.endSection(); }安装App使用systrace命令python systrace.py -b 32768 -t 10 -a packagename -ooutputfile.html sched gfx view wm am app (命令执行过程中点击启动App)运行操作后打开我们的html文件可以看到我们app的启动相关数据运行操作后打开我们的html文件可以看到我们app的启动相关数据图中红圈部分是我们需要注意的地方AppBegin就是我们打点的代表区间可以看到这段区间时间是732.127毫秒。最下面有两个数值一个是WallDuration这个就是我们代码的执行时间另一个CPUDuration是我们的CPU执行时间。为什么两个会有时间差异呢打个比方CPU在执行代码的时候遇到一些需要等待回调的数据才能继续往下执行情况的时候CPU会处在等待情景这个时候是不计算CPU执行时间只有等回调数据回来了再往下执行时才算是调用了CPU的资源。所以这里也点明了我们的优化方向之一就是如何更好的利用CPU的资源。PS其实这段的数据主要都是启动时间的数据但在实际开发中我们可能还会去监测每个方法 所用的时间看看有没有可优化的余地。方法监测的时间除了给每个方法单独打点外还可以 使用Traceview工具来更好的监测。优化技巧终于讲到我们的优化技巧了具体优化我们可以分为以下几种方式闪屏优化业务优化线程优化UI优化1、闪屏优化在我们的App启动中其实是低端机中其实会有点击了应用要等待一段时间才会打开App页面的时间。这个现象对用户的体验非常不友好那要怎样优化这个现象呢这里可以采用theme切换的方式来达到视觉上的快速启动。!-- 新建layer-list的xml文件 -- layer-list xmlns:androidhttp://schemas.android.com/apk/res/android android:opacityopaque item android:drawableandroid:color/white/ item bitmap //这里是我们想要展示的开屏图片 android:srcmipmap/longkong_splash android:gravityfill/ /item /layer-list然后新建Themeitem nameandroid:windowBackgrounddrawable/lanucher/item item namewindowActionBarfalse/item item nameandroid:windowNoTitletrue/item item namewindowNoTitletrue/item /style在我们的启动页设置这个Theme:activity android:name.business.MainActivity android:configChangeskeyboardHidden|orientation|screenSize android:hardwareAcceleratedtrue //设置theme android:themestyle/ThemeActivitySplash android:windowSoftInputModestateUnspecified intent-filter action android:nameandroid.intent.action.MAIN / category android:nameandroid.intent.category.LAUNCHER / /intent-filter /activity记得在页面onCreat中切换回我们原用的Theme:Override protected void onCreate(Nullable Bundle savedInstanceState) { setTheme(R.style.ThemeActivity); super.onCreate(savedInstanceState); }现在点击桌面图标简直是秒开App。当然这只是视觉上的秒开实际的启动时间还是没什么变化下面才是真正优化启动时间的方法。2、业务优化我们在一接到优化任务的时候不要想着立马着手就做一些异步线程优化之类的。第一步应该是先梳理我们的业务。梳理清楚我们启动的每一个模块看看哪些是必要的哪些是可以切掉的哪些是可以延迟加载的。①可以切掉的没什么可说的直接删除②可以延迟加载处理的比如地图SDK、扫一扫等这些个模块很多时候不一定是在首页就需要用到的我们可以做一些延迟加载甚至是只有在使用到时才进行初始化的处理。延迟加载的时机可以在首页用户数据加载完成时去进行Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() { Override public boolean queueIdle() { //执行延迟加载的代码 return false; } });IdleHandler的运行机制是只有在CPU空闲的时候才会去执行操作这样就不会造成首页用户操作时卡顿的情况。③必要的对于必要的代码我们可以做以下业务相关优化操作使用更加优秀框架比如我们的SharedPreferences可以尝试夫换成腾讯的MMKV框架在数据量大的情况下优化效果非常明显使用更加优秀的算法我们有些代码比如文件操作之类的或许有更加优秀的算法代码可以大大减少计算步骤作一些取舍比如一些中低端的机型或者其本身的性能没办法很好的运行我们的某些功能在这个时间我们可以尝试去跟产品经理沟通做一些功能上的取舍。3、线程优化上面我们讲了一些必要代码的业务优化在一些确实没有业务优化空间或者优化了还不是很理想的代码我们可以进行线程优化。线程优化其实就是合理利用CPU的核心数将几个耗时的任务进行并发处理可以极大减少总的运行时间。线程优化需要注意几点合理控制线程的数量每台机子的核心数都不同如果我们线程开得太多可能会相互竞争CPU资源除了要用线程池进行统一管理外设置合适的线程数也很重要。我们可以参照AsyncTask的源码来设置线程池的线程数private static final int CPU_COUNT Runtime.getRuntime().availableProcessors(); private static final int CORE_POOL_SIZE Math.max(2, Math.min(CPU_COUNT - 1, 4));//线程数任务的依赖关系有些任务可能是需要前一个任务执行完后再进行操作如果在线程优化中没有处理好这个相关可能会造成空转如下图如何处理好线程的依赖关系可以参照或使用市面上的一些启动框架比如阿里开源的Alpha启动框架。我们这里使用自己自写的Task启动器其原理都是一样的最终都是构成一个有向无环图。TaskDispatcher.init(this); TaskDispatcher dispatcher TaskDispatcher.createInstance(); dispatcher.addTask(new InitBulyTask()) .addTask(new InitJPushTask()) .addTask(new InitRichTextTask()) .addTask(new InitSkinTask()) .addTask(new InitTinyTask()) .addTask(new InitFragmentTask()) .start(); dispatcher.await();经过上面的优化技巧后我们再来看一下现在的启动时间是多少从上面的三张图中我们可以看出优化的启动时间缩短了可观的50%左右。4、UI优化UI优化主要是对我们的视图布局进行优化尽量减少绘制时间对于一些界面复杂的项目效果也是非常的显著这里我们暂时不讨论留待UI优化的文章来讲。其他优化除了上面的优化之处还是有很多其他的优化技巧。比如根据我们具体的业务还可以做一些类加载的优化I/O上的优化GC的优化磁盘文件的优化还可以通过保活来达到快速重启甚至还有一些CPU锁频的黑科技。总结App启动优化是门无尽的学文还是很多可以继续深挖的点。我们在实际开发中也可以通过监控APM上的数据来进行更加针对性的优化。只有不断的进行实操才会发现更多可以优化的方向。最后我整理了一份 Android 性能优化的学习手册文档 包含了启动优化UI 布局优化卡顿优化和布局优化优化 Glidel 加载超大 gif 图等等有需要的可以私信【性能优化】或者【点击这里】
http://www.w-s-a.com/news/509396/

相关文章:

  • 网站建设的征求意见稿iis 网站 红
  • 网站搭建教室企业网站开发实训心得
  • 阿克苏建设网站佛山app定制
  • 做淘宝网站要求与想法大型网站建设推荐
  • 在百度做网站赚钱吗跨境电商网站开发
  • 酒店网站建设策划方案南昌网站建设南昌
  • 临沂罗庄做网站房产cms
  • 五合一网站做优化好用吗网站设计的专业流程
  • 毕业设计论文网站开发需要多少网站seo建设方案
  • h5页面用什么做杭州优化外包哪里好
  • 许昌网站建设百姓国货app下载
  • 什么是建站装修公司做宣传在哪个网站
  • 阿里云虚拟主机多个网站吗大庆油田建设集团网站
  • 坂田公司做网站公司有网站域名后如何建网站
  • 自媒体网站程序淘宝网站维护
  • 凡科网站建设网站wordpress 七牛oss
  • 搬瓦工的主机可以用来做网站吗分类信息网站开发需求方案
  • 上海高端网站开发站霸网络国际网站建设的目的
  • 程序员招聘求职的网站做网站加入广告联盟
  • 网站建设的技术方案模板易做文学网站的logo
  • 建设国家标准官方网站响应式网站切图
  • 网站链接数怎么做wordpress安装网址
  • 沈阳建网站 哪家好如何做旅游网站推销
  • 继续网站建设南通网站建设方法
  • 淮南公司网站建设如果做京东优惠卷的网站
  • 二手房网站平台怎么做项目工程监理公司网站建设方案
  • 秦皇岛做网站公司小说推广平台有哪些
  • php网站做分享到朋友圈天元建设集团有限公司信用代码
  • 邱县做网站在线免费图片编辑器
  • 网站备份网站做网站如何把支付宝微信吧