android 黑白屏问题总结
1.Android APP 在启动的时候会有黑白屏的问题,主要是由手机性能和APP 应用启动时加载有关系。
手机启动过程:
手机开机 —BootLoader 镜像加载 —Lunix kernel 虚拟机开启 —加载 init.rc 文件 — 创建 zygote (孵化器) 进行fork 进程 — 首先进行fork出systemService — 创建出binder线程池 systemServiceManger ---- 系统服务创建 (AMS WMS PMS CamerService SensorService)
系统启动流程
1.打开电源 引导芯片代码加载引导程序 BootLoader 到am 中执行
2.Bootloader 把操作系统拉起
3.liunx 内核启动系统设置 找到init.rc 文件启动初始化进程
4.init 进行初始化 和启动属性服务,之后开启zygote 进程
5. zygote 开始创建jvm 并注册jni 方法,开启systemServier
6. 开启binder线程池和systemservicemanger 并开启各种服务
7. Ams 启动luncher
Launch 启动
1.如何查看当前的activity
adb shell dumpsys activity activities 查看当前的activity名
2,查看进程
adb shell ps
3. Luncher 点击类 : Launcher.java
当我们用手点击一个图标时: 就会在执行 Launcher.java 中的onclick 方法,
会通过一个intent 将我们的应用信息传入 AMS 中
在ams 中会进行判断 在内存中是否已经存在,,如果存在 则直接调用内存堆栈中的数据,不存在则 需要 通过zygote 进行fork 一个system service 通过 activityThread main 方法中直接调用application 中oncreate 的方法和mainActivity的oncreate 的方法
startActivity (intent )会开一个APP进程
ActivityThread.java 作为入口,用attach 开启APP ,在加载 application 和activity
thread.attach(false) —>mgr.attachAppliction(mAppThread) 会通过远端进程进行回掉,private void handleBindAppliaction(AppBndData data)
Application app = dataInfo.makeApplication 创建application对象
黑白屏问题,主要是style 文件中,, 我们对应的启动页面设置了主题
白屏 <style name =“App.theme”,parent =“Theme.appCompat.light”>
黑屏
解决方案:
伪处理:
1.找到父类主题中定义的 用来控制黑白屏
2.将windowBackground 设置为透明状态
3,单独做一个主题 ,设置background的颜色,再在功能清单中的单独Activity 下设置 当前的主题,这样让APP中其他的还是使用之前的,只是启动页面设置的是我们自己设置的主题
QQ中的做法是:
true
@null
真正处理:
trace工具分析代码执行时间
Debug.startMethodTrace(filepath)
中间为需要统计代码的执行时间
Debug.stopMethodTrace();
将生成的文件从手机中导出,然后拖入as中进行分析
优化方案有:
1.开启子线程: 没设置handle 没操作UI,对异步要求不高
2.懒加载: 用的时候再进行初始化,如网络,数据库
本文介绍了手机启动过程和系统启动流程,包括从开机到加载内核、开启服务等步骤。还提及Launch启动相关操作,如查看activity和进程等。重点分析了黑白屏问题,主要因style文件中启动页面主题设置,给出伪处理和真正处理方法,以及相应优化方案。

被折叠的 条评论
为什么被折叠?



