android知识点总结
1,Android UI体系 1) 三层架构、MVC、MVP、MVVM对于小项目可以按如下分法(mvp选用);对于大项目可以按模块分,然后模块内再按如下分发。
分包(按功能分):
basal:基类;
surface(fragment、activity、broadcast、listener):界面类;
adapter:适配器类;
mvp(presenter、constract、view):mvp层类;
util:通用工具类;
widget:自定义View类;
entity:实体类;
Config.class
MyApplication
1234567892)xml(Extensible Markup Language,可扩展标记语言)
字体一般是34px、30px、28px、26px、24px、22px
小细线1px dddddd 粗线10px f5f5f5 背景色f5f5f5、app的左右距离是20px
主题色
3)控件
①View
【Android学习】android.view.ViewStub
【android学习】EditText
【android学习】Toast(消息弹框)
【android学习】Dialog对话框
【android学习】webView(网络视图)
【Android学习】列表(ListView、RecyclerView)和adapter
【Android学习】android.view.ViewStub
【Android学习】Android常用框架
②标题栏
4)Window和WindowManager
5)图片
①Drawable
②Bitmap的加载和Cache
6)动画
7)Splash界面
①作用
展现产品的logo
初始化操作(创建数据库,读取配置文件)
连接服务器检查软件授权
连接服务器检查软件的更新
②实现
用handler延迟,在SplashActivity界面中写如下代码 ,并禁用返回键。
private final int SPLASH_DISPLAY_LENGHT = 3000;
……
handler = new Handler();
// 延迟SPLASH_DISPLAY_LENGHT时间然后跳转到MainActivity
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this,
MainActivity.class);
startActivity(intent);
SplashActivity.this.finish();
}
}, SPLASH_DISPLAY_LENGHT);
12345678910111213142,Android基础
1)四大组件-Activity
①Fragment相关
2)四大组件-Service
3)四大组件-Content Provider
4)四大组件-BroadcastReceiver(广播接收者)
5)重要组件-intent
6)Context类和Application类
7)【Android学习】Android Studio学习
项目结构
gradle
jar和arr
8)Android系统优缺点
五大不足:
①安全与隐私
②首先开卖Android手机的不是最大运营商
③运营商仍然能影响到Android手机
④同类机型用户减少:缺少统一机型的程序
⑤过分依赖开发商缺少标准配置:开发依赖第三方,缺少产品统一性。
优点:
①市场份额大
②应用程序发展迅速
③智能厂家助力
④手机价廉但性能不低
⑤机型多,硬件配置优
⑥系统开源:利于创新,开发者多,方便开发。
9)常用Manager
3,Android底层
1)存储方式(数据持久化)
数据持久化:将内存中的数据模型转化为存储模型。、
其他存储方式:
redis:一个开源使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
sessionStorage:生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了,那么所有通过sessionStorage存储的数据也就被清空了。
file, sqlite3, Preferences, ContentResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序不能通过这三种方法去操作别的应用内的数据。
①SQLite数据库
存储结构化数据。
②File(文件存储、I/O存储)
常用语存储大数量的数据,但是缺点是更新数据将是一件困难的事情。
分为内部存储和外部存储(SD卡)两种存储方式。
File.mkdirs和File.mkdir的区别
File.mkdirs在多层目录底下创建文件。
File.mkdir能在二层目录只能一层创建文件,仅能在已有目录下创建. 对于路径实际不存在的,调用File.mkdirs()方法。
③SharedPreferences
本质就是一个xml文件,常用于存储较简单的参数设置。
共享参数,键值对形式存储。
④网络存储
将数据存储到服务器上。
⑤ContentProvider存储
查看四大组件-Content Provider。
ContentProvider的目的是对外暴露数据供其他程序查询。
每个Content Provider都会对外提供一个公共的URI(包装成Uri对象),如果应用程序有数据需要共享时,就需要使用Content Provider为这些数据定义一个URI,然后其他的应用程序就通过Content Provider传入这个URI来对数据进行操作。
2)【Java学习】Java内存
3)【Android学习】DVM——apk生成、安装、启动、反汇编
4)【Android学习】NDK编程——JNI(Java Native Interface,java本地接口)编程
5)【Android学习】Android安全机制
6)【Android学习】Android系统架构
4,进程和同步
1)【android 】进程、守护进程的实现及进程拉活
2)【java学习】进程、线程、程序
3)【Android学习】IPC(跨进程通信,Inter-Process Communication)
4)【Android学习】Android网络:Socket、HTTP
①socket传输中,流的关闭
②android端通过socket接收到数据产生乱码
③socket ECONNRESET 异常
④socket长连接,造成数据粘包问题
⑤【Android学习】断线重连、长连接心跳机制
5)【Android学习】序列化:Serializable和Parcelable
6)【Android学习】消息机制Handler
7)【Android学习】线程的其他方式:AsyncTask、IntentService、HandlerThread、ThreadPoolExecutor
8)【java学习】多线程并发
9)【java学习】java锁
10)资源池
Android中提供了资源池的对象有:
–Message
提供了消息池,有静态方法Obtain从消息池中取对象。
–AsynTask
AsynTask是线程池改造的,池里 默认提供(核数+1)个线程进行并发操作,最大支持(核数 * 2 + 1)个线程,超过后会丢弃其他任务。
–ThreadPool
Thread默认不提供资源池,除非使用线程池ThreadPool管理。
对于Looper,每个Looper创建时创建一个消息队列和线程对象,但不是资源池。
5,数据结构和算法
【数据结构】排序算法
【数据结构】查找
【数据结构】树
【数据结构】图
【数据结构】数组
【数据结构】队列和栈
【数据结构】线性表:顺序表、单链表
【算法】电梯调度算法/磁盘扫描算法
6,设计模式
编程素质】多线程编程之设计模式
1.复合模式:三层架构、MVC、MVP、MVVM
2.设计模式-单例模式
配置类的使用。
3.设计模式-模板方法
通过抽象类或接口提前定义要实现的方法。
4.设计模式-观察者模式
消息的通知。
5.设计模式-装饰模式:处于安全目的,保护被访问者
对一个已有的接口进行功能扩展。
如,继承父类,并增加扩展新的方法。
6.设计模式-策略模式
MVC中:
控制器是视图的策略。
视图只关心系统中可视的部分,对于任何界面行为,都委托给控制器处理。
控制器负责和模型交互来传递用户请求,对于工作是怎么完成的,视图毫不知情。
7.设计模式-工厂模式(Factory Pattern)、 控制反转(IoC)与依赖注入(DI)
简单工厂、工厂方法、抽象工厂。创建新对象。
8.设计模式-命令模式
支持撤销。
9.设计模式-适配器模式(Adapter)
adpater的使用。
10.设计模式-外观模式
如用一个spManager管理所有的sp对象获得的数据。
11.设计模式-桥接模式
将抽象化(Abstraction)与实现化(Implementation)脱耦,使得二者可以独立地变化。
举例:汽车和公路问题。
12.设计模式-代理模式(委托模式、Proxy Pattern):动态扩充对象功能
传入对象,并调用对应的方法。如接口回调。
13.迭代器模式
Iterator。
14.组合模式(合成模式)
允许将对象组合成树形结构来表现“整体/部分”层次结构。树节点可以对子节点进行增删改查等操作。
View和ViewGroup就是一种很标准的组合模式。
15.状态模式
机器取糖果,允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。
16.生成器模式Builder Pattern
如AlertDialog.Builder。
17.责任链模式
经常被使用在窗口系统中,处理鼠标和键盘之类的事件。
18.蝇量模式Flyweight Pattern
19.解释器模式Interpreter Pattern
20.中介者模式Mediator Pattern
21.备忘录模式MementoPattern
当你需要让对象返回之前的状态时(例如:用户请求撤销操作),就使用备忘录模式
22.原型模式Prototype Pattern
23.访问者模式Visitor Pattern
7,网络基础、操作系统基础
【网络基础】TCP/UDP
【数据结构】位运算
【网络基础】IP计算
8,数据库
9,java基础
【java学习】java基础语法
【java学习】String字符串
【java学习】类Class
【java学习】集合框架
【java学习】JVM学习
【java学习】面向对象三大特性:封装,继承,多态
【Android学习】缓存
【java学习】修饰符
【java学习】数据类型
【java学习】装箱与拆箱、泛型
【java学习】异常
【java学习】反射机制
【java学习】java基础语法
【java学习】正则表达式(Regular Expression)
【java学习】Json框架
【Java学习】JAVA和C++区别
10,Android性能优化
1)布局优化、自定义View优化
删除布局中无用的控件和层级
有选择地使用性能较高的ViewGroup
用<include>标签、<merge>标签、ViewStub
2)activity启动优化
耗时操作优化
布局文件优化
视图加载优化。如:Fragment的懒加载,只有显示时才去加载。
3)列表优化
尽量复用convertview历史的缓存,减少创建新的view对象。
尽量的减少子孩子的id的查询次数,定义一个viewHolder。
4)内存优化
5)图片缓存
图片的三级缓存机制
11,项目管理
项目管理-Git使用
项目管理-SVN学习
12,应用
1)token登录
①定义
Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。
②作用
Token的目的是为了验证用户登录情况以及减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。
Token是在客户端频繁向服务端请求数据,服务端频繁的去数据库查询用户名和密码并进行对比,判断用户名和密码正确与否,这样增加了服务器负担。
③应用
i>用户首次登录成功之后, 服务器端就会生成一个 token 值,保存在数据库并返回给客户端.
ii>客户端拿到 token 值之后,使用sp进行保存。
iii>客户端再次发送网络请求(一般不是登录请求)的时候,就会将这个 token 值附带到参数中发送给服务器.
iv>服务器接收到客户端的请求之后,取出token值与保存在本地(数据库)中的token值做对比
如果两个 token 值相同, 说明用户处于登录状态。
如果没有这个 token 值, 没有登录成功。
如果 token 值不同: 说明原来的登录信息已经失效,让用户重新登录。
2)登录验证
通过.requestFocus()获得焦点,提高用户体验
String Str_name = et_username.getText().toString().trim();
String Str_psw = et_password.getText().toString().trim();
if (null != Str_name && Str_name.equals("")) {
showCustomToast("用户名不能为空");
et_username.requestFocus();
} else if (null != Str_psw && Str_psw.equals("")) {
showCustomToast("密码不能为空");
et_password.requestFocus();
} else if (Str_psw.contains("卍")) {
showCustomToast("密码不能含有特殊字符");
et_password.requestFocus();
} else if (Str_psw.length() < 6) {
showCustomToast("密码不能少于6位");
et_password.requestFocus();
} else {
tryLogin(Str_name, Str_psw);
}
12345678910111213141516173)GPS开启
检测GPS是否开启,如果没有则跳到GPS界面供用户开启。
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
// 判断GPS是否正常启动
if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
ToastUtil.showShort(context, "未开启位置服务,请开启GPS导航");
// 返回开启GPS导航设置界面
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 0);
return;
}
123456789104)其他demo
android离线日志文件打印
检测android主屏,并把app从后台切换置前台
保持屏幕常亮
断线重连机制
13,问题解决
1)eclipse找不到设备,adb需要重启
写一个.bat文件,内容如下:
(注意:cd /d D:\android-sdks\platform-tools 请替换为自己的adb.exe路径)
@echo off
taskkill /F /IM adb.exe
echo Kill完成...
pause
echo 重启开始...
cd /d D:\android-sdks\platform-tools
adb devices
pause. & exit
123456789102)其它
①android中使用Menu时可能需要重写的方法有:onCreateOptionMenu()和onOptionItemSelected().
②eclipse编辑器乱码解决
configChanges详解-之解决问题:手机切换字体后,app异常崩溃
eclipse创建app时多出appcompat_v7
android开发误删appcompat_v7
Replace “…” with ellipsis character (…, &&;#8230;) ?
eclipse ‘Launching Hello’has encountered a problem
Android app性能测试小结(7个性能指标)
1.性能测试的几个指标:
2.性能测试环境准备:
3.启动时间
3.1,监控值的获取方法
启动分为冷启动和热启动,冷启动:应用程序首次启动,进程首次创建并加载资源的过程;热启动:应用程序启动后点“back”键、“Home”键,应用程序退到后台,并未被完全“杀死”的状态,再次启动;
3.1.1,冷启动
启动App命令:adb shell am start -W -n package/activity 停止App命令:adb shell am force-stop package
获取package/activity的方法:1.先执行监控指令 adb logcat | grep START ,再启动程序,生成的log信息中可以查看该程序的包名和activity名
ThisTime:647 这条信息中的时间就作为这次应用启动的耗时
3.1.2,热启动
启动App命令:adb shell am start -W -n package/activity 停止App命令:adb shell input keyevent 3 (发送一个keyevent事件,3代表点击手机上的“back”键)
ThisTime:427 这条信息中的时间就作为这次应用启动的耗时
3.2,“启动时间”监控的脚本实现
“启动时间”监控的脚本实现有两种方式:1.获取命令执行时间,作为启动时间参考值;2.在命令前后加上时间戳,以差值作为参考值 (此种方式相对更精准)
脚本中需要创建两个类以及方法:
脚本实现如图1、2
得到的数据在csv文件中,数据分析时去掉第一次的数据,取均值,并绘制出一个数据曲线,得到的均值的参考价值的体现方式有两种形式:1.取竞品的数据作为对比(比如测试的是google浏览器,用其他浏览器做对比);2.取历史版本的数据做对比(版本间对比,看最新版本的开发过程中是否造成了启动时间的延长)
3.2.2,时间戳差值监控用到的类以及方法:
4,CPU监控值的获取方法、脚本实现和数据分析
4.1获取方法:
取图中第一个百分数作为cpu状态值
脚本实现如图3、4
注意:关于cpu的状态测试的时间要稍长一些,需要配合一个自动化脚本来实现对设备的操作,例如重复搜索100次,同时执行监控命令,来获取搜索100次之后的cpu状态值
5,流量监控值的获取方法、脚本实现和数据分析
5.1获取方法:
1.首先要获取进程的ID,命令:adb shell ps | grep packagename;
,如图中的“5715”就是我们想要的进程的ID。
2.获取进程的ID流量,命令:adb shell cat/proc/pid/net/dev(pid:第一步中获取到的进程的ID);
如图,得到的结果中只需要关注两个值:Receive( app接收到的数据)、Transmit( app发出的请求数据);流量 等于这两个值的和:Receive+Transmit。只取eth0、eth1两个网卡的Receive和Transmit即可,也就是把图中框起来的4个数值相加。
脚本实现如图5、6
在实际的测试采集过程中,需要多次采集数据,取最后一次采集到的流量值和第一次采集到的流量值的差 ,作为我们本次测试过程中的流量消耗,这也是我们关注的重点!
6,电量监控值的获取方法、脚本实现和数据分析
*注意:一般,用硬件去测试电量的消耗更为准确,用脚本的方式去获取电量值会与用硬件获得的值有一点的偏差,但是用脚本的方式适合硬件资源相对有限的创业公司。
6.1获取方法:
1.命令:adb shell dumpsys battery;2.因为测试过程中需要手机和电脑通过USB线连接,这样会造成测试电量的过程中手机同时也在充电,所以需要通过命令切换成“非充电状态”,此命令为:adb shell dumpsys battery set status 1;
如图,level值就是电量, 取测试结束后和测试开始时的电量做差,就是我们要得到的测试过程中电量的消耗。
脚本实现如图7、8
7,内存监控值的获取方法、脚本实现和数据分析
7.1.内存监控值的获取方法
命令:adb shell top; 执行完命令后,在所得的数据中,需要关注两个字段:VSS(虚拟耗用内存)、RSS(实际使用物理内存), 然后对测试过程中VSS、RSS的变化情况做曲线图,得出测试过程中内存的变化情况。
具体的步骤:1.
,(-d:命令刷新的频率,1的单位是“秒”),将得到的数据输出到meminfo文件中
2.操作被测试的应用
3.对得到的数据过滤,过滤出所测试应用的内存值(如图)
7.2.脚本实现如图9、10
7.3.数据分析
打开得到的csv文件,windows系统可以用excel打开,然后对VSS、RSS做曲线图
得到的曲线图中,具体什么样的表现是有问题的、不可以接受的,需要长时间的测试之后才可能发现一些问题;
1.例如连续测试2个小时或以上,然后看内存变化的区间范围,如图中内存的变化区间(最大值-最小值)为6M,可以认为6M的变化对app的影响并不大!如果长时间测试之后得出的变化区间在几百M,一般认为此时的内存消耗是有问题的。
2.由于每次软件发版都会测试内存,我们要在多次测试的过程中根据内存的变化得出一个经验值(参考值),然后对比本次测试所得的值和经验值,来判断本次测试所得的值是不是在合理区间内。
8,FPS&过渡渲染的概念和监控方法--分析页面卡慢的方法
A.FPS:Android应用的帧率FPS(每秒的帧数) 是衡量应用流畅度的一个非常重要的指标,可以根据FPS对应用做一些优化,Android系统里定义每秒大于60帧 是流畅的(一帧的完成时间是16ms ),如果每帧的完成时间大于16ms,我们认为就有卡顿的现象。
1.获取方法: 进入到开发者选项,可以看到有“GPU呈现模式分析”的选项,开启后即可以条形图和线形图的方法显示系统的界面响应速度,可以用以观察系统流畅度。那么要如何根据曲线判断系统是否流畅呢?实际上这个曲线表达的是GPU绘制每一帧界面的时间,只要不超过顶部绿线,都可以视为足够流畅。
开启GPU呈现模式分析
只要下方的曲线不超过绿线,都可以视之为流畅
使用系统自带方法测试流畅度的好处很多,首先是数据准确,系统肯定最知道自己的帧率如何;其次是不占资源,对流畅度测试的影响比较小。那么这个方法是否万无一失呢?其实还是有一些缺点的。比如说利用CPU渲染UI的App界面,就无法得到测试结果(当然这些界面基本无一例外卡顿无比,不用测也知道不流畅);当系统停顿了一下,例如微博加载图片时,响应速度会大幅增加,曲线瞬间突破绿线——这情况不能说不流畅,因为这属于内容和界面先后响应的机制,如果光凭曲线是否突破绿线判断是否流畅,未免太过局限。所以,在测试应用程序的时候,需要一边操作应用,去直观的感受流畅度,一边观察曲线的走势,如果直观的感受流畅度差,并且曲线也大量的突破绿线,那么此时我们认为测试应用的流畅度低,需要优化。
1.在设置里打开GPU呈现模式分析。点击Android设备的“设置”->"开发者选项",然后勾选“GPU显示配置文件”。
2.
2.1.点击Android设备的“设置”->"开发者选项",然后勾选“GPU显示配置文件”。重启我们的应用。启动应用以后,在应用的页面上做滑动
2.2.lijiedeMacBook-Air:~ lijie$ adb shell dumpsys gfxinfo com.dianping.v1>fps.txt (com.dianping.v1即packagename)
2.数据分析:
打开生成的fps.txt,找到Profile data in ms这部分数据。
4.为了看得更直接,我们可以把数据放到Excel中,然后以图表的形式进行查看。
从图中可以看出来,我这个应用的流畅度是很低的,正常情况下每帧的完成时间在16ms左右,如果1秒60帧的话,而且Execute时间太长!所以是需要进行优化的。
a: "Draw" : 创建显示列表(display lists,记录所有view对象的绘制指令)的时间开销。
b: "Process" : 执行显示列表中绘制指令的时间。UI视窗中的View数量越多,需要执行的绘画命令就越多。
c: "Execute" : 将一帧图像交给合成器compostior的时间。这部分占用的时间通常比较少
测试方法二:FPS Meter测试安卓帧数
FPS Meter是一款非常实用的小软件,能够用数字实时显示安卓界面的每秒帧数,非常直观。此外,FPS Meter还可以显示最大帧数、最小帧数以及平均帧数,用来评价安卓流畅度极具价值。由于涉及到了系统功能,所以FPS Meter需要root。如果你打算尝试,请先root机后再使用。
FPS Meter的使用很简单,开启App后启动服务即可。在App内,你可以选择帧数显示的位置,以及是否开启平均帧数、最低/最高帧数显示。开启服务后,即可看到有帧数显示于界面上。这里要注意,使用FPS Meter测量帧数需要在开发者选项中停用HW叠加层才会比较准确。
FPS Meter可以显示最大最小帧数以及平均帧数
FPS Meter可以测试界面帧数,不过某些手机如果界面静止,帧数会为0。FPS Meter除了测量系统界面帧数外,还可以用来测量游戏的帧数,所以用FPS Meter来测试某部安卓机游戏性能多强也是个很好的选择。
当然,FPS Meter也并非十全十美。由于属于第三方App,所以可能会有一些兼容性问题。某些安卓机或者ROM使用FPS Meter可能会不兼容,即使成功开启了帧数显示也没法测量到准确数值,而某些设备使用FPS Meter甚至会死机。不过在大多数情况下,这款App还是相当值得信任的。
安卓在多个版本中都通过新技术提升了流畅度,比如说安卓2.3引入Dalvik、安卓4.0引入GPU界面绘制、安卓4.1引入黄油计划、安卓4.3引入Trim以及安卓4.4引入ART等等。
2.过渡渲染:
屏幕上的某个像素在同一帧的时间内被绘制了多次。简单言,app的一个页面所显示的效果是由像素一帧一帧绘制而成,过度绘制就是意味着这一帧被绘制多次。
如果是静态的布局,可能影响不是很大,如果是动态的,比如ListView,GridView,ViewPager等在性能上就会差一点,常见的比如listView上下滑动,过度绘制的情况下,就会出现卡顿,或者跳跃感很明显。 当然过度绘制肯定无法避免,我们只能减少不必要的绘制,那么如何看的出来,一个页面是否过度绘制呢?
下面我们来看一下,下面说的这个工具只有Android 4.2以上有此功能。
2.1.打开我们的手机设置--开发者选项--调试GPU过度绘制(可能有些手机不是这样的叫法,有的是显示GPU过度绘制,根据手机而来),选择显示过度绘制区域,此时手机页面会显示成这样,不要惊慌。。
这里给大家介绍下,绘制颜色的标识,从好到差:蓝色(1x次绘制)-》浅绿色(2x绘制)-》淡红色(3x绘制)-》红色(4x绘制)
2.2.怎么减少过度绘制
一般情况下,最好把绘制控制在2次以下,3次绘制有时候是不能避免的,尽量避免,4次的绘制基本上是不允许的。
怎么减少绘制是我们最关心的,我们来看一个图(自己项目里面的。。我们以图片下面的ListView为例子)从图上看的出来,被绘制3次甚至4次
我们来看下代码:listView和item
红色标记出来的,是问题的所在,背景颜色绘制了三次,最后一个是选择器,因为有点击效果,现在把前2个都给删掉,只留最后一个,现在我们看一下图片,看是不是达到预期的效果。
这里只是一个简单的例子,当然有很多原因组成,我们可以从以下几个方面着手:
第一:如果是相对比较复杂的布局,建议使用相对布局;
第二:如果需要多层嵌套,我们可以使用merge标签来减少嵌套;
第三:减少背景颜色的多次绘制;
第四:对于使用Selector当背景的Layout(比如ListView的Item,会使用Selector来标记点击,选择等不同的状态),可以将normal状态的color设置 为”@android:color/transparent”,来解决对应的问题;
第五:当一个页面有多种不同的显示效果,最常见的是listview 中的多种item布局,我们可以采用抽取的方式,等等。
下面再介绍以下Android studio自带的工具,
首先 打开 Android Device mointor,找到 Hierarychy view (这里我简称 视图树)
将你要查看的项目运行到模拟器或者真机上,在Android device mointor 上windows 找到当前的模拟器或者真机,找到当前的项目,
如图:点击当前项目某一个布局,在View里面会显示当前这个布局的各个节点图,然后点击3(profile node),在视图里面就会显示4上面的三个点
他们分别表示 测量 布局 绘制,再次点击的时候,我们就可以看到子节点上着三个圆点在变化,他有3个颜色,绿色,黄色,红色,红色代表着耗时最长,也就意味着我们需要优化,我们可以不断点击,查看 测量布局以及绘制所需要的时间,从而优化。
相关问答
魅族手机系统如何改 android 系统-ZOL问答ngjie您好,系统数据是不能被删除的,就算格式化这个系统数据还是会在的,没有了这个,手机还有系统么。有用(0)回复tianshenhuangdi是不是正版的android系统...
怎么解决开机提示" android isstarting-ZOL问答可能是你的WIN7系统有问题,试下重装有用(0)回复mtk平台的话在frameworks/base/services/core/java/com/android/server/pm/Packa...
怎样用手机剪辑电影片段好?1、首先,点击打开剪影App,进去App界面2、在软件主界面,点击下方的同款剪3、然后点击上方的电影感4、选择要剪辑的视频的视频感,点击进入5、然后点击右下...
QVOD快播是什么?-ZOL问答搭载独显芯片的新机盘点:iQOONeo9SPro+、一加Ace3Pro和RedmiK70至尊版评论0雷柏刀锋系列多模无线键盘全系升级:3.9mm极限轻薄,多设备交互更方便评论7.....
怎么提取手机迅雷下载的视频-ZOL问答在电脑中,使用第三方管理工具进行操作,按照步骤先后打开应用—文件共享—迅雷—download目录,在download目录下就是迅雷中下载的视频。选择要导出到电脑的视频...
编辑星是免费的的视频编辑软件吗..._网络编辑_帮考网编辑星、乐秀、VidTrim、小影、视频剪辑大师编辑星是北京友维科软件科技有限公司开发的适合大众使用的视频编辑软件,包含编辑星PC版和编辑星APP。编...
苹果人工客户服务电话-ZOL问答在iPhone中通话时,别人打进电话来是可以同时通话吗?1.3万浏览5回答苹果手机通讯录怎样知道电话是存手机上还是卡上?4395浏览5回答苹果手机打电话为什么...
app占用多少cpu高-ZOL问答大家都知道iOS是基于Unix的,而Unix有个top命令是可以查到进程的详细信息,这其中就包括cpu和内存占用。但是苹果是不允许你这么做的。我在手机上安装...
你最喜欢的软件有哪些?Everything基于名称快速定位文件和文件夹;火萤酱Ctrl+Ctrl热键快速调出搜索框,可以检索本地文件,也可以快速打开默认浏览器就行搜索,很是方便;Ditto保...
手机出现卡顿反应慢怎么处理华为-ZOL问答7、若您所在的位置网络不稳定或信号不好,请您尝试连接网速和信号稳定的数据网络或者WLAN。网络不稳定会导致联网应用存在延迟,播放在线视频、在线音乐时加载慢...