自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

二手认知

值得你的时间

  • 博客(12)
  • 收藏
  • 关注

原创 Android GC 简史

Android 开发者对于 GC 既熟悉又陌生,听说过很多虎狼之词,对一些问题又不置可否;今天聊聊 Android 里的 GC,如果你对于下面的问题有兴趣又没答案,那你应该会有些收获:JVM、Dalvik、ART, 它们之间是什么关系?所有版本的 Android 都是分代管理堆内存吗?垃圾对象到底是怎么被回收的?「内存抖动」你怕不怕?作为一个应用层开发者,我真的需要关心 Android GC 吗?前言:概念辨析为了避免一些朋友不是很清楚概念,在正文开始之前,先简单辨析一下:GC.

2021-05-25 22:09:53 612 2

原创 「Android Binder」AIDL中的 in / out 到底是啥?

用过aidl的同学,可能见过下面的写法:interface IInterface { void foo0(in int input); void foo1(out IDTParcel parcel); void foo2(inout IDTParcel parcel);}不知道你有没有好奇过这里的 in / out / inout 是什么意思呢?directional tag去官网一查,只找到一点点信息:All non-primitive parameters req

2021-04-03 23:39:16 603 3

原创 【Android Tips】小厂的扫码还能怎么做?

先说重点,你的App能识别下面这个二维码吗?如果扫码功能基于ZXing与ZBar,而且没有自定义处理过数据,大概率是不行的。这个时候,你可以试试google这个(基于机器学习的)库:Scan Barcodes with ML Kit on AndroidSample: ML Kit Vision Showcase App with Material Design()结果截图:下面说一下我面临的问题与思考过程今天接到一个优化扫码的任务,然后收到了下面的二维码(就是上面那个):扫码比

2021-01-28 11:39:07 300

原创 「Android渲染」图像是怎样显示到屏幕上的?

我们每天花很多时间盯着手机屏幕,不知道你有没有好奇过:手机屏幕上的这些东西是怎么显示出来的?这时候来了一位Android程序员(当然也可以是iOS或者是前端程序员)说: 这里显示的其实是一个View树,我们看到的都是大大小小的View。。。。听起来很有道理,我们也经常指着屏幕说这个View怎么怎么样,可问题又来了:屏幕认识View吗?我们把一个View发给屏幕,它就显示出来了?程序员老兄又来了: 屏幕当然不能识别View,它作为一个硬件,只能根据收到的数据改变每个像素单元的数据,这样整体

2021-01-24 22:55:09 1737 2

原创 【Android渲染】在onDraw()中创建对象的隐形成本

熟悉Android自定义View的人大概都知道:不要在onDraw里创建对象大家在讲到这里,理由大概都是:onDraw()被调用快速高频 -->快速频繁申请内存 —>频繁GC–>线程挂起 -->UI卡顿当然,上面的理由重要且正确,没有什么可说的。因为它明显地写在了onDraw()里,你一看就能联想到这些内容,所见即所得。今天聊一个容易被忽略(或完全不知道)的隐形成本:我们重写onDraw()方法是为了自定义View,这时创建的对象很可能是与View绘制相

2021-01-18 03:05:33 800

原创 【Android渲染】为什么alpha渲染性能低?

开门见山1. 多次写入像素在渲染不透明的像素时,只需要写入一次在渲染透明像素时,每个像素至少需要写入两次第一次是之前的像素值第二次把之前的颜色与设置的不透明度做混合,产生一个新的颜色值,写入这个新的颜色值。我们看到的一层下面有另一层的半透明效果,对于屏幕来说就是一个混合后的具体的颜色值。2. 指令重排无效发给RenderThread的DisplayList,里面的内容是按照View层级来排列的,默认顺序执行,但这样性能并不好:分治、归并的思路可以提高性能,大家都听过指令重排序

2020-12-06 00:55:00 393

原创 一次HTTP请求经历了什么?

程序员一定被问过这个问题:我在浏览器输入一个网址,后面发生了什么?有人要说了,这么老的问题也拿出来说:就是HTTP协议呀,服务端也使用HTTP协议接收,我们就是这么做的,很简单。。。上面的回答可能是很多工程师真实的工作体验,现在的技术领域分工高度发达,我们引入一个库就可以高效地开发应用了,完全不需要也没时间去了解底层发生了什么。那么底层究竟发生了什么呢?事实上这个老问题真的不算简单,可延伸的幅度非常宽广,我们按照下面几个问题慢慢展开:问题1: 生成HTTP报文后,怎么发出去的?问

2020-11-25 16:59:40 898 3

原创 关于TCP的几个问题

今天聊聊TCP,老规矩,为了更符合读者的思考逻辑,文章依然由问题来组织:在一个不可靠的网络中,如何做到可靠的传输? TCP的连接到底是啥? “三次握手”做了什么? “四次挥手”做了什么? 丢包重传是怎么做的? 服务器处理不过来了, 你能发慢点吗? 好慢啊,网络卡了?先补充一点前置知识,我们讨论的TCP,属于TCP/IP模型的传输层(第四层),向下基于IP层,向上支撑了应用层。就像本文的结构一样,这个世界是由问题组成的,协议的诞生是为了解决问题。TCP解决了这样一个问题:问题1:

2020-11-23 16:28:05 1376

原创 Android Tip: Java代码打印Android堆栈

Log.getStackTraceString(new Throwable())

2017-06-12 15:02:45 284

原创 Android packages Android常见APP对应包名

Android 应用包名

2017-05-03 16:03:38 19148 1

原创 Android Tip : Android 获取当前Activity对象的方式:

【Android Tip】Android 获取当前Activity对象的方式: 背景:(当你不能使用this获取Activity对象)如何方便地当前Activity对象

2016-01-31 00:45:01 2920

原创 Android Tip : Android GestureDetector 手势识别 抬起 操作

【Android Tip】【Android GestureDetector 手势识别 抬起 操作】关于GestureDetector的用法,大家自行Google这里只说一个小点:就是手势监听中缺失对下面情况的监听:down->scroll->up(手指离开屏幕的时候没有在移动,onFling不能捕捉到这个事件)解决方案: 在onTouchEvent方法中重新捕捉这个事件我们知道,Android

2016-01-09 17:18:58 2251

空空如也

空空如也

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

TA关注的人

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