自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 问答 (1)
  • 收藏
  • 关注

原创 句柄泄露的分析思路

句柄(file descriptor)即文件描述符,简称fd。Linux 系统中,把一切设备都视作文件,当进程打开现有文件或创建新文件时,内核向进程返回一个文件描述符。FD作为文件句柄的实例,可以用来表示一个打开的文件,一个打开的网络流(socket),管道或者资源(如内存块),输入输出(in/out/error)。

2023-04-17 10:50:59 933

原创 相机缩放介绍

getZoomRatios 方法getZoomRatios 可以获取到当前摄像头支持的缩放倍数集合返回结果样例:[100, 102, 104, 107, 109, 112, 114, 117, 120, 123, 125, 128, 131, 135, 138, 141, 144, 148, 151, 155, 158, 162, 166, 170, 174, 178, 182, 186, 190, 195, 200, 204, 209, 214, 219, 224, 229, 235, 24

2021-08-19 09:40:12 545

原创 Android 卡顿优化之 Skipped * frames 掉帧的计算

Android 卡顿优化之 Skipped * frames 掉帧的计算有时候看日志的时候,可能会在日志中看到类似下文的打印:Skipped 30 frames! The application may be doing too much work on its main thread.这句话的意思就是:该行日志打印之前的主线程存在耗时操作,导致掉了30帧。之前知道这句日志的意思,但是不知道系统是怎么计算的,于是专门花时间看了下 Choreographer 的源码。Choreographer职责

2021-03-31 23:28:49 4695

原创 自定义View—裁剪框的过度动画实现

最近视觉给了一个动效,类似于图片选择框的效果,其中包含选择框的一个从无到有的的放大过程。因为裁剪框位置不固定,视觉不能给出统一的动效,因此需要自己动手实现我所掌握的资料:裁剪框的四点坐标。第一想法是通过属性动画的位移和缩放来实现,开始定义一个0dp的view,需要展示动画时,先移动到中点坐标,然后开始放大,但是裁剪框外部是阴影覆盖,内部是透明的,发现无法实现。然后就决定自定义view,一帧...

2020-03-01 15:25:11 443

原创 分辨率,像素,dp之间的联系

参考:1.https://www.zhihu.com/question/211496002.https://www.jianshu.com/p/ec5a1a30694b像素:即px,画面中最小的的点(单位色块)分辨率:画面水平方向的像素 * 画面垂直方向的像素分辨率分为两种:屏幕分辨率 和 图像分辨率屏幕分辨率:例如:屏幕分辨率是 1024 x 768,也就是说设备...

2020-02-12 20:59:54 1791

原创 Android UI性能优化之过度绘制

最近入坑性能优化,导师安排我做公司项目的性能优化,so,搞了两个星期之后有了点自己的体会,这是第一篇,关于过度绘制这一块:准备工作:手机——>开发者选项——>调试GPU过度绘制 adb命令——>开启『调试 GPU 过度绘制』:adb shell setprop debug.hwui.overdraw show ...

2019-03-10 13:30:59 317

原创 TCP 三次握手 四次挥手总结

TCP面向连接 默认网络环境是恶劣的,需要各种算法保证, 状态为      SYN  发起一个链接      ACK  确认回复      RST   重新连接      FIN   结束连接 流量控制 通信双方各声明一个窗口,标识自己当前能够的处理能力,不要发太快,也不要发太慢拥塞控制 当已经发生堵车时,控制自己发送的速度 三次握手请求——>...

2018-07-26 15:56:37 176

原创 https 与 http 协议 总结

https协议与http协议最大的不同在于安全性,https协议采用了ssl协议,保证通信的安全性大致流程 CA  证书                                                         电脑内有内置的CA公钥,可以去解密服务端证书双方各自生成一样的对称密钥,不存在密钥在网络上传输的情况服务端证书中包括 服务端公钥,截止日期...

2018-07-25 17:45:28 221

原创 迁移应用到Android O ——广播限制

   首先记住两点:显式广播和隐式广播属于发送广播行为;静态注册和动态注册属于注册广播接收器行为   由于开发者在开发过程中,为了一些功能的需要,经常在清单上静态注册广播接收器,由于静态注册的recevicer,即使应用不启动,仍然能够接收到广播,假设一个情景,你的手机上有10个app,每一个app开发者都为其静态注册了android.net.conn.CONNECTIVITY_CHANGE ...

2018-07-24 11:30:34 384

原创 android智能手机虚拟键与activity的关系

按 Home 键       onPause onStop  点击菜单键 能够看到 应用视图,此时应用activity处于 onStop 状态, 点击应用视图,回调 onRestart onStart onResume                             按返回键          该行为事件默认为  onPause onStop onDestory  点击菜单键 ...

2018-07-24 11:13:59 261

原创 android 8.0 新特性:通知渠道

  由于Google的限制,要求在2018年10月之前 targetSdkVersion 必须在26以上,更改过之后发现在androd 8手机上不再推送通知,查看android 8.0官方文档发现,添加了通知渠道新特性,并要求targetSdkVersion 26以上的android 8手机必须实现通知渠道  通知渠道可以用户自定义,并在用户手机系统设置里面修改,通知渠道的引入可以让用户对通知的优...

2018-07-15 11:19:13 1571

原创 Resolved versions for app (26.1.0) and test app (27.1.1) differ.

Execution failed for task ':app:preDebugAndroidTestBuild'.> Conflict with dependency 'com.android.support:support-annotations' in project ':app'. Resolved versions for app (26.1.0) and test app (27...

2018-07-13 15:51:34 173

转载 表达式中的运算符EQ NE GT GE LT LE

转载:http://www.weicot.com/%E8%A1%A8%E8%BE%BE%E5%BC%8F%E4%B8%AD%E7%9A%84%E8%BF%90%E7%AE%97%E7%AC%A6eq-ne-gt-ge-lt-le/GT=Great Than >EQ=Equal =GE=Great and Equal >=NE=Not Equal <> //等运算符,如果运算...

2018-05-27 17:35:02 6257

原创 解决 duplicate entry: com/android/volley/AuthFailureError.class 重复包导入

该问题是由于重复导入包导致,一般是由于app module 与 library module中导入相同的jar包导致,针对标题中的问题可通过在app 的 build.gradle中android{ //other configurations { all*.exclude group: 'com.android.volley' }}如果是 duplicate entry...

2018-05-25 09:42:08 2168

原创 android 针对数据库版本升级的单元测试

对于已经发布的app,进行数据库版本升级时,必须要考虑用户原有的旧数据是否能够兼容新版本数据库,最基础的做法就是将备份数据导入app新版本中,进行全面测试,判断应用程序是否出错,但这种做法很难做到万无一失,而且耗费成本非常高,而还有一种简单有效的方法就是写单元测试,目前,升级数据库的时候,我的基本思路是,旧数据库文件copy到当前app应用数据库文件中,然后open...

2018-05-23 17:09:44 344

原创 RecyclerView之notifyDataSetChanged()

/** * Notify any registered observers that the data set has changed.//通知所有的注册观察者数据已经发生改变 * * <p>There are two different classes of data change events, item changes and structural * changes....

2018-05-06 17:03:53 793

原创 androis Studio cache properties 系统找不到指定的文件

最近android studio Build时遇到一个问题,一直报错 Gradle sync failed: C:\Users\Username\.gradle\caches\2.14.1\scripts-remapped\build_22b2w9hvazb1r1ed8tae6hsoi\6orjsa5x9d3biz51duhla23nj\cp_proj57408229\cache.properti...

2018-04-24 10:10:14 479

原创 .gitlab-ci.yml 文件中添加单元测试

在项目根目录下的 .gitlab-ci.yml文件中添加stages: - build - test/*其他配置*/unitTest: //自定义名字 stage: test script: //脚本 执行 - ./gradlew test //执行语句...

2018-04-13 16:41:09 2984 1

原创 解决“Cradle project sync failed. Basic functionality(e.g.editing.debugging)”will not work properly

把Android studio版本升级之后,再导入原来的项目就会报错,gradle失败,显示“Cradle project sync failed. Basic functionality(e.g.editing.debugging)”will not work properly 同时在Messages中显示  XXXX\cache.properties(系统找不到指定的文件。)   解决方法:删...

2018-03-30 08:44:07 906 1

原创 解决把项目从git上clone下来,但用Android studio打开并没有和git连接

VCS -> Enable Version Control Integration...  ->点击下拉框,选择Git即可

2018-03-21 16:41:21 4067 2

原创 在Retrofit框架中创建日志拦截器Intercept

最近做项目中需要查看服务器返回的原始json格式数据,由于项目基于Retrofit/Rxjava网络协议框架,其返回值为Bean类型格式,于是便想写一个Intercept,对服务器返回的数据拦截并进行log显示,下面是自定义拦截器类public class TestInterceptor implements Interceptor { @Override public Respo...

2018-03-17 20:59:52 729

原创 Response中body()与peekBody()的区别

body() 和 peekBody() 方法返回的都是一个 ResponseBody 对象,不同的是 body() 返回的当前 response 的 body,查看源码 /** * Returns a non-null value if this response was passed to {@link Callback#onResponse} or returned * from...

2018-03-17 20:31:27 2882

原创 调用finish方法的activity后续执行过程

最近开发ServerMonitor时,遇到一个有趣的情况,在一个方法体内调用了finish方法之后,后续代码依旧得到执行

2018-02-10 13:14:51 1572 1

转载 解决 android studio中import所有的类文件都是红色的,不可用

File -> Invalidate Cashes / Restart点击打开链接

2018-02-02 21:50:20 2970 1

原创 Android Sqlite 代码实现 多表联合查询

最近开发ServerMonitor解决的一个issue,关于数据库的的升级,需要log表内添加一个is_scuuess字段并且对原数据库中每条日志的该记录赋值,判断成功的逻辑是根据不同协议的返回状态码及请求时间进行判断,因为日志表内只有一个site_id字段,具体日志记录的协议类型字段在site表内,于是决定采用多表联合查询的方法,通过site_id,将log表的日志记录与site表内的port_

2018-02-02 20:54:49 5133 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除