Piasy

NEVER STOP

开箱即用的 WebRTC 开发环境

在刚刚落幕的 WWDC17 上,苹果为我们带来了一个不小的惊喜 —— 其浏览器内核WebKit将正式支持 WebRTC,而未来基于 WebKit 内核的苹果浏览器,比如macOS High Sierra、iOS 11 中的 Safari 浏览器和Safari 技术预览版 32,都将使用到 WebRTC 技术。 ——苹果终于入伙 WebRTC 适逢我也正在倒腾一些 WebRTC...

Frida Android hook 初体验

最近的工作需要通过 hook 研究一些目标 APP 的系统 API 调用,很早就了解到了 Frida,这次终于可以体验一把了。花了一整天的时间,才终于把环境搭好,主要是准备手机系统花了时间。示例代码可以在 GitHub 获取。 【2017.6.4 更新】:自动生成 Javascript hook 脚本的工具有了一个可用的版本,check it out :)。 环境准备 最终成功的环境:...

记一次 YUV 图像翻转的性能优化

今天下午修复了一个 YUV 图像翻转的问题,YUV 图像翻转其实没啥好说的,但期间碰到了一点性能问题,性能优化的过程我觉得比较有趣,所以在这里分享出来,希望对大家有帮助。 YUV 翻转 YUV 是一种图像编码格式(RGB 也是一种图像编码格式),YUV 主要用于视频,用来降低带宽。安卓平台上,用 Camera1 API 采集出来的数据(通过 PreviewCallback 回调获得)默认...

安卓基础:App 各大组件

Activity Activity 是和用户交互的入口,几乎用户所有的交互操作都发生在 Activity 中,只有一个例外:通知栏,notification area (bar) 和 notification drawer 都由系统控制(SystemUI,一系列有界面的 Service,除了状态栏,还包括虚拟按键、最近任务、壁纸等,更多内容可以阅读《深入理解Android 卷III》)。桌...

安卓基础:事件传递及滑动冲突的处理

基本概念 所有 Touch 事件都被封装成了 MotionEvent 对象,包括 Touch 的位置、时间、历史记录以及第几个手指(多点触控)等; 事件有很多类型,ACTION_DOWN,ACTION_UP,ACTION_MOVE 等; 对事件的处理包括三类:传递,dispatchTouchEvent();拦截,onInterceptTouchEvent();消费,onTou...

安卓基础:View 绘制

View 树的绘图流程 当 Activity 接收到焦点的时候,它会被请求绘制布局,该请求由 framework 处理。 整个 View 树的绘图流程在ViewRoot.java类的performTraversals()函数展开,该函数所做 的工作可简单概况为是否需要重新计算视图大小(measure)、是否需要重新安置视图的位置(layout)、以及是否需要重绘(draw),流程图如下:...

Java 基础:动态代理、多态原理

RESTful API 调用很多人都在用 Retrofit,说到 Retrofit 就不得不提动态代理,虽然这不是它唯一的亮点,而且也不是动态代理的典型使用场景,但大家就是爱问:说说动态代理是怎么回事吧?Retrofit 的解析请见 拆轮子系列:拆 Retrofit。 动态代理的原理 看过源码之后其实很简单,就是一句话:运行时生成实现类(代理类)的字节码,对其所有的方法调用都转发到 in...

安卓基础:task, launchMode, Intent flag

Task 是一个从用户角度出发的概念,是一些 Activity 的组合,它们组合起来是为了让用户完成某一件工作(或者说操作)。Task 在 framework 中对应的类是 com.android.server.am.TaskRecord,它用一个列表记录着其中的所有 Activity,至于到底是怎么记录的,就要看源码了。 Task 内的 Activity 以栈的形式组织起来,这个 栈 也...

安卓基础:Activity/Fragment 销毁与重建

Activity 的销毁与重建有两种情况:App 处在后台,由于内存紧张而被杀死,当用户回到 我们的 App 时,被杀掉的 Activity 会被重新创建;当手机配置发生变化时,例如旋转屏幕方向,Activity 会被重新创建。 当 Activity 被销毁时,在第一种情况中,它加载的 Fragment 显然也要被销毁,因为此时通常整个 App 都被杀死了,但第二种情况中,我们可以通过设置...

安卓基础:Activity/Fragment 生命周期

看图 developer 官方图: GitHub 神图: 回答问题 以下过程均是针对 AppCompatActivity 和 support Fragment,测试代码可以在 GitHub 获取。 单个 Activity + Fragment 的启动? Activity onCreate Fragment onAttach Fragment onCreate Frag...