Android性能优化总结

持续更新ing 性能优化主要几个方面 流畅性优化 内存优化 CPU 优化 稳定性优化 安装包优化 流畅性 人眼和大脑之间的协作能感受到的最大帧率就是每秒 60 Fps 画面更新,那么要求每一帧的绘制时间就是 1000/60 = 16.67ms,所以Android系统要求每一帧尽可能在 16ms 内绘制完成 怎么看帧率? adb shell dumpsys gfxinfo "com.baidu.hi.debug" // 或者 开发者模式 > GUP 呈现模式分析 > 屏幕上显示条形图 屏幕下方的柱状图每一根代表一帧,其高度表示“渲染这一帧耗时”, 绿线代表16ms标准。每一帧的渲染过程拆分成了8个步骤: 1) Swap Buffers:表示处理任务的时间,也可以说是CPU等待GPU完成任务的时间,线条越高,表示GPU做的事情越多; 2)

阅读全文...

Java中注释@link、@see用法

在源码中经常可以看到注解中有类似的写法,点击可以直接跳转到指定方法,对阅读注解有很大的帮助。 /** * When {@link android.app.ActivityOptions#makeSceneTransitionAnimation(Activity, * android.view.View, String)} was used to start an Activity, <var>listener</var> * will be called to handle shared elements on the <i>launching</i> Activity. Most * calls will only come when

阅读全文...

那些不常用的运算符

1.非运算符 ( ~ ) int a=2; System.out.println("a 非的结果是:"+(~a)); 位运算都是补码运算的,2的二进制码应写8位的:00000010 按位取反为111111101,此时仍为补码,而补码转源码需要先-1,符号位不变再取反。换算为原码为:10000011 即-3。有个规律,取反都是原数+1再转为负数,如~19为-20 原码和补码转换关系 分两种情况,以八位原码转换补码为例: 正数(符号位为0的数)补码与原码相同. 负数(符号位为1的数)变为补码时符号位不变,其余各项取反,最后在末尾+1 例如:原码01100110,补码为:01100110 原码11100110,先变反码:10011001,再加1变为补码:10011010 计算机中的符号数有三种表示方法,即原码、反码和补码。

阅读全文...

linux 常用命令总结

1.文件操作 man (manual) 展示命令用法和参数, 比如man ls 就会显示ls的用法 ls  显示文件或目录,如果要显示隐藏文件加用ls -a, a是all的意思 stat 显示指定文件的详细信息,比ls更详细 mkdir 创建目录, eg: mkdir zsn cd 进入目录, cd / 进入根目录, cd .. 进入父目录(退回到上一级目录), cd zsn 进入zsn目录 cp 拷贝命令, 拷贝文件夹或者文件 eg. cp 目录或文件名 新的目录或者文件名 mv 移动文件或者重命名, 注意mv重命名的功能,linux没有专门重命名的方法,通过mv zsn1.txt zsn2.txt 来修改名称 rm 删除文件,

阅读全文...

Javascript 判断是否在内网

开发公司内部的应用的时候经常需要判断是否在内网,通过判断 wifi名称或者内网 IP都比较麻烦而且变动较大,通过访问内网资源来判断是目前看来最佳的方案。 因为浏览器有禁止跨域的限制,所以我们采用 jsonp 来请求,网址不支持跨域 或者 jsonp 怎么办?没关系,只要能访问内网成功 complete 就会执行,不然会走超时的逻辑,我们就是通过这样来实现判断的,代码如下: $.ajax({ type: "GET", timeout : 3000, url: "http://home.mi.com", dataType: "jsonp", complete : function(XMLHttpRequest,status){ if(status==='timeout'){ alert("非内网"); } else { alert("内网"); } } });

阅读全文...

Android 适配18:9 全面屏黑边

在使用18:9等非传统16:9的手机面世后, 部分应用出现了上下黑边 正如小米mix2发布会所说,谷歌官方支持的默认高宽比就是16:9,所以在高宽比更高的手机上就只能显示16:9了,自如就出现大黑边了 解决方案 1. 设置 android:resizeableActivity # compileSdkVersion 需要设置为 24以上,不然报错 resizeableActivity 属性不存在 compileSdkVersion : 24 # application 设置 resizeableActivity 属性为 true <application ... android:resizeableActivity="true"> 这种方案会开启Android N分屏功能,所以需要适配下每个 Activity 自适应高度 2. 设置 meta-data:android.max_aspect # 设置最大高宽比为 2.1 <application

阅读全文...

评论组件畅言主题样式修改

随着多说、网易云跟帖的停止服务,要找一个合适的博客评论系统还真不容易,目前稍微好点的可能就畅言和友言了,实话说这两个的体验真不是很满意,所以就有了这篇文章,看看能不能想办法去自定义样式。 畅言官方提供了一些样式定制 http://changyan.sohu.com/help/a-custom-css-setting.html 不是太好改,整体上还是感觉不好,特别是侧边栏天天弹广告。 在浏览畅言官网的时候发现官网用的评论框和我们的不太一样,官网的效果明显更清新简洁 , 但是后台并没有提供配置这个主题的方法啊!! # 官网样式: # 目前样式: 经过一番分析发现初始化的 JS 代码是一样的,但是加载的样式结构和代码都完全不一样 # 官网结构: # 目前结构: 经过分析,一个获取配置的接口引起了我的注意: https://changyan.sohu.com/api/2/config/get/cyqARl5Jo?callback=changyan523657214 返回的内容如下: changyan523657214({"data":{"isv":{"id":"889","auditMode":"1"

阅读全文...

华为 P9/P9 Plus 获取root权限

准备 window 电脑一台 申请解锁 到 EMUI 官网 https://www.emui.com/cn/plugin/unlock/detail 输入手机信息申请解锁 输入正确资料后会提示 您的解锁码为:******** 下载 adb 工具包 http://dlc2.pconline.com.cn/filedown3590356968223/1UIwPc3e/adb1.0.32.zip) 按官网介绍的开始解锁 https://www.emui.com/cn/plugin/unlock/step 下载 root 工具 pan.baidu.com/s/1mi19eA0 密码:

阅读全文...

Android View加载显示过程分析

从 setContentView 开始 public void setContentView(@LayoutRes int layoutResID) { getWindow().setContentView(layoutResID); initWindowDecorActionBar(); } PhotoWindow调用 LayoutInflater.from(context).inflate(layoutResID, mContentParent) 初始化, 意味着所有从xml加载View都会使用LayoutInflater 获取LayoutInflater对象 context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) // 实际操作类是 PhoneLayoutInflater registerService(Context.LAYOUT_INFLATER_SERVICE, LayoutInflater.class, new CachedServiceFetcher<LayoutInflater>() { @Override public LayoutInflater createService(ContextImpl ctx) { return

阅读全文...

cannot synthesize weak property because the current deployment target does not support weak references

在用 pod 依赖 dsBridge 项目后报错如下: Error:(72, 13) cannot synthesize weak property because the current deployment target does not support weak references 猜测原因是dsBridge没有指定运行最低版本,导致不支持 weak 属性。 https://github.com/wendux/DSBridge-IOS/blob/master/dsBridge.podspec 解决方案: 在 Podfile 下面添加如下代码: post_install do |installer| installer.pods_project.targets.each do |target|

阅读全文...