继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

app启用那些事

一只名叫tom的猫
关注TA
已关注
手记 346
粉丝 62
获赞 329
各种看帖子各种总结,好的文章我写了地址,可以去看看,作者写的
启动一个app  就好比找个妹子开房
世界上有两种
 有的直接强上,没有氛围,气氛弄得比较尴尬。随着这个妹子是准备好跟你开房的
 
有的呢  给妹子看星星,看月亮。然后一起愉快的开房。

这个去开房的路上,就可以看做我们要启动一个app。
有的App启动时会出现一段时间的黑屏。
这就是俗称的启动黑白屏的问题。这期间弄得用户不知道该干嘛,氛围比较尴尬(虽然说 用户虐我千百遍,我待用户如初恋)
那怎样优化这个过程呢
需要看启动系统了哪些事情,我们来分析下系统干了什么

当用户点击桌面icon的时候,系统准备好了,给App分配进程空间,就好像去酒店开房,但是你又不能直接进入房间,你得坐电梯去房间,那么你坐电梯的这个时间,实际上就是系统的准备时间,
那么系统的这个准备时间一般来说不会太长,
但假如的开的是一个情趣套房呢,系统就得花不少时间来打理,所以系统给所有用户都准备了一个过渡界面,
这个界面,就是启动时的黑屏白屏,也就是你坐电梯里面看的小广告,这个广告里面有星星 有月亮,你就到房间门口了,
但是这不能在门口解决,还要开门,对吧。开门之后
你想干嘛都可以了,这个想干嘛的速度。就完全取决于你开门的速度了,你门开得快,
自然那啥快,所以这里是开发者可以优化的地方,有些开发者掏个钥匙要好几秒,有的只要几百毫秒,完全影响了后面那啥的效率。
 App 启动时间是什么 ,从哪里开始 (我们要知道启动时间是怎么算出来的)
https://segmentfault.com/a/1190000007406875#articleHeader20

启动定义
当手指点击app图标 到加载第一个页面为止

trace文件分析
http://www.ituring.com.cn/article/273967

启动类型
http://www.jianshu.com/p/c967653a9468

工欲善其事,必先利其器。想要优化 App 的启动速度,必须有准确衡量启动时间的方法,
否则优化完之后效果怎样,自己都不知道,说出去别人也不信服不是。在做 App 启动时间统计之前,
当然必须弄明白有哪些启动类型,每种启动类型的特点。
通常来说,在安卓中应用的启动方式分为以下几种:



1	冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,
这个启动方式就是冷启动。冷启动因为系统会重新创建一个新的进程分配给它,
所以会先创建和初始化 Application 类,再创建和初始化 MainActivity 类,最后显示在界面上。


2  热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),
所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。热启动因为会从已有的进程中来启动,
所以热启动就不会走 Application 这步了,而是直接走 MainActivity,所以热启动的过程不必创建和初始化 Application,
因为一个应用从新进程的创建到进程的销毁,Application 只会初始化一次。


3  首次启动:首次启动严格来说也是冷启动,之所以把首次启动单独列出来,一般来说,首次启动时间会比非首次启动要久,
首次启动会做一些系统初始化工作,如缓存目录的生产,数据库的建立,SharedPreference的初始化,如果存在多 dex 和插件的情况下,
首次启动会有一些特殊需要处理的逻辑,而且对启动速度有很大的影响,所以首次启动的速度非常重要,毕竟影响用户对 App 的第一映像。


frameworks\base\cmds\am\src\com\android\commands\am\Am.java

http://www.jianshu.com/p/1d2e55f1d393



时间定义
这个信息在activity 窗口完成所有的启动事件之后,第一次绘制的时候输出。这个时间包括了从启动进程到第一次布局与绘制的所有时间。
这基本上是你需要知道的主要时间。它不包含用户点击app图标然后系统开始准备启动activity的时间,因为作为一个开发者你无法影响这个时间,
所以没有必要去测量它。

在log日志中  查看叫  Displayed   日志  过滤一定要是  NoFilters

adb shell dumpsys activity activities
4.4以后的手机会查看得到
http://blog.csdn.net/u013278099/article/details/50052557


此法获取的启动时间非常精准,可精确到毫秒。
   ThisTime: 最后一个启动的Activity的启动耗时
   TotalTime: 自己的所有Activity的启动耗时
   WaitTime: ActivityManagerService启动App的Activity时的总时间(包括当前Activity的onPause()和自己Activity的启动)
   
D:\Android\android-6.0.0_r1\frameworks\base\core\java\android\app\ActivityThread.java
D:\Android\android-6.0.0_r1\frameworks\base\services\core\java\com\android\server\am\ActivityRecord.java

D:\Android\android-6.0.0_r1\frameworks\base\core\java\android\app\Instrumentation.java
 
java -jar apktool   d  
冷启动时间是指当用户点击你的app那一刻到系统调用Activity.onCreate()之间的时间段。在这个时间段内,WindowManager会先加载app主题样式中的windowBackground做为app的预览元素,然后再真正去加载activity的layout布局

第一种等待



第二种


冷启动时间优化
知道了Android冷启动时间的原理之后,就可以通过一些小技巧来对冷启动时间进行优化,
从而让你app加载变得”快“一些(视觉体验上的快)。我们可制作一个启动Activity的背景样式的.9图片

http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/1223/3796.html
Application是程序的主入口,特别是很多第三方SDK都会需要在Application的onCreate里面做很多初始化操作,
不得不说,各种第三方SDK,都特别喜欢这个『兵家必争之地』,再加上自己的一些库的初始化,会让整个Application不堪重负。
优化的方法,无非是通过以下几个方面:
   延迟初始化
   后台任务
   界面预加载
减少应用启动时的耗时

1、在Application的构造器方法、attachBaseContext()、onCreate()方法中不要进行耗时操作的初始化,
一些数据预取放在异步线程中,可以采取Callable实现。 
2、对于sp的初始化,因为sp的特性在初始化时候会对数据全部读出来存在内存中,
所以这个初始化放在主线程中不合适,反而会延迟应用的启动速度,对于这个还是需要放在异步线程中处理。 
3、对于MainActivity,由于在获取到第一帧前,需要对contentView进行测量布局绘制操作,
尽量减少布局的层次,考虑StubView的延迟加载策略,当然在onCreate、onStart、onResume方法中避免做耗时操作。


 


白屏产生原因
http://blog.csdn.net/fancylovejava/article/details/39643449
.
源码分析
http://www.jianshu.com/p/6037f6fda285

在Android系统中,应用程序是由Launcher启动起来的,
其实,Launcher本身也是一个应用程序,其它的应用程序安装后,
就会Launcher的界面上出现一个相应的图标,点击这个图标时,Launcher就会对应的应用程序启动起来

源码分析



frameworks/base/core/java/android/app/Instrumentation.java



方法执行时间最长

原文链接:http://www.apkbus.com/blog-340477-76764.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP