
android学习笔记
文章平均质量分 81
浮生只为美人笑
android之旅
展开
-
Android单元测试技巧
之前做单测是为了完成任务,现在实在地为了测试代码的正确性,就容易遇到坑,刚好之前也没写总结,现在记一些好的单测方法,还有踩过的坑。一.日志输出我觉得这个是最重要的,测试代码时肯定要根据输出的日志来判断代码走到哪,之前又太注重行覆盖率,对这块不重视,这块还花了挺多时间处理的。Log.xxx是不能输出日志到控制台的,只能是System.out.print才能看到,所以我们需要mock Log的静态方法,把它的输出转变为System.out.print:PowerMockito.mockStatic(Lo原创 2020-10-24 11:50:35 · 661 阅读 · 0 评论 -
多点触控笔记
一.多点触控的事件类型单点触控可以用event.getAction() 获得触摸事件的类型:ACTION_DOWN、ACTION_UP、ACTION_MOVE对于多点触控呢?不能再用getAction获得事件类型,要通过getActionMask获得(getActionMask是通用的方法,也适用于单点触控),除了上面那三个事件,还有两个事件:ACTION_POINTER_DOWN: 除第一个指针以外进入屏幕的其他指针。ACTION_POINTER_UP: 除第一个指针以外退出屏幕的其他指针。原创 2020-06-12 11:42:25 · 300 阅读 · 0 评论 -
OpenGLES在内存和卡顿上的优化
我们知道OpenGLES里面有个函数叫GLES20.glReadPixels,可以帮助我们从FrameBuffer里面把纹理像素拷贝到数组里面,但是这个方法有几个弊端:①耗时,花费的时间和截图的大小成正比关系,在一些差的设备上耗时非常严重,如果是播放视频,有明显卡顿;②耗内存,一般截图就是为了把像素数据输出到文件,通常都用Bitmap,这里有个问题是,用Bitmap的话,需要消耗两份内存,创建Bitmap的时候一份,截图时还需要申请一份。接下来我就针对这两个弊端给出优化的方案。一.耗时问题的优化耗原创 2020-05-15 17:23:52 · 4388 阅读 · 0 评论 -
Android感知View的出现
最近在做一个播放组件端上防作弊的效果,播放的时候判断广告是否被部分或者完全遮挡了。比较重要的载体是Window,实际的表现形式是View,所以重点往监控Window和View的创建这样的思路出发。目前的话一共想到三种方案:①监控View的创建:通过给LayoutInflater 设置factory2来感知View的创建:LayoutInflater.from(context).setFa...原创 2019-11-24 10:38:14 · 497 阅读 · 0 评论 -
Kotlin的::语法和高阶函数遇坑记
大家都知道,Kotlin有高阶函数,每个函数的函数类型由函数的形参列表、->和返回值类型组成。比如:fun pow(base : Int, expo : Int) : String {}// 使用::将函数名称赋值给变量var myfun : (Int, Int)->String = ::pow 函数类型就像数据类型一样,既可用于定义变量,也可用作函数形参类型,还可作为函数的...原创 2019-09-10 21:13:33 · 287 阅读 · 0 评论 -
Android主流开源视频播放器对比
播放器/对比维度库大小年限热度(git star)issues数开发组织适配版本ijkplayerlite(4M),all(8.2M)6年23647+2226+bilibiliandroid2.3以上Exoplayerlite(1.7M),all(2M)5年13273+337+googleandroid4.1以上GSYVideoPl...原创 2019-06-21 20:42:00 · 13566 阅读 · 0 评论 -
Android未捕获异常机制
一.Framework层的未捕获异常二.Framework层未捕获异常避免弹窗方案三.Native层的未捕获异常机制四.Native层收集crash原理五.Native层未捕获异常避免弹窗方案一.Framework层的未捕获异常:先说几个结论:①只要把异常传给了系统,进程和进程组就会被干掉,不管哪个线程出现异常;②如果异常不传给系统,主线程出现未捕获异常,进程也会死亡,但子线程不会...原创 2019-05-11 15:49:57 · 746 阅读 · 0 评论 -
Kotlin30分钟快速上手
探讨、补充,纠正。参考来源李刚的《疯狂Kotlin讲义》一.基本类型二.运算符三.流程控制四.函数和lambda表达式五.高级函数六.数组和集合七.面向对象八.泛型九.比较偏的语法一.基本类型 (1)每种类型都有一种扩展,比如Int还有另外一种Int?,区别在于**定义时后者能为null,**但是调用相关方法时需要?.fun()这样调用,或者强制调用!!.fun()。这一切都...原创 2019-03-10 16:20:10 · 630 阅读 · 0 评论 -
Android8.0绕过后台启动服务的限制
Android8.0绕过后台启动服务的限制看完startService的源码之后发现,只要我们的targetSDK设置成小于26的依然还是可以在8.0的手机上后台启动service的。来简单看下源码吧:ContextImpl$startServiceCommon:private ComponentName startServiceCommon(Intent service, boolean ...原创 2018-11-15 15:46:26 · 9956 阅读 · 1 评论 -
从native层去startService(非原生系统7.1保活)
上篇文章我们谈到了在Android7.1原生系统上保活《从native层去startService(原生系统7.1保活)》但是我们发现在非原生系统的手机上使用时不能保活成功,主要是参数错误,导致startService没能成功,针对这个问题,又再进行了一点研究。1.错误的原因:会触发“calling Package is null”的问题或者其他字符串为空的问题,本质上属于同一个问题。这个问题...原创 2018-11-03 16:37:06 · 1155 阅读 · 11 评论 -
从native层实现startService(android7.1原生系统保活)
一.准备工作:因为我们的工程会包含binder库和binder间接依赖的cutils库,但这些库都不在Ndk里面,直接在native层去编译会找不到,所以要放在源码环境下编译。#include <binder/MemoryHeapBase.h>#include <binder/ProcessState.h>#inclu原创 2018-11-03 15:03:43 · 2735 阅读 · 0 评论 -
关于Parcel
关于Parcel1. 概念: Parcel是一个容器,他可以包含数据或者是对象引用,并且能够用于Binder的传输。同时支持序列化以及跨进程之后进行反序列化。在android系统中用途非常广泛,主要功能就是用来进行IPC的通信,用来序列化的Parcelable接口,还有aidl其实也就是封装了Parcel的数据传递。2. 数据结构: Parcel底层维护了一个用来存储数据的变量: ...原创 2018-11-03 10:24:15 · 1037 阅读 · 0 评论 -
BroadcastReceiver的注意事项
一.动态注册优于静态注册1.静态注册生命周期长于动态注册: 官网开发手册有提到: 太多的BroadcastReceiver会影响手机的性能和电量(原因还没弄明白,估计跟跨进程通信有关),所以应该尽可能地缩短BroadcastReceiver的生命周期,减少我们自身app的电量消耗。2.动态注册优先级高于静态注册,能降低被拦截的风险。二.动态注册生命周期管理1.推荐在Activi...原创 2018-08-22 15:17:21 · 986 阅读 · 0 评论 -
openGLES使用:RGBA转ARGB
使用openGLES的时候,可以使用readPixesl方法读取framebuffer里面的像素值,但是在android里面,bitmap四个通道的只有ARGB,而openGLES读取的图像颜色排列是RGBA,所以这里需要进行一下转换: int len=width*height;RGBA->ARGBfor(int i=0;i<len/2;i++){ i...原创 2018-05-07 19:27:52 · 2764 阅读 · 0 评论 -
android自定义编译注解器学习笔记(一)
这几天在学习自定义注解器,好记性不如烂笔头,将相关学习作为笔记记下来,加深理解,同时也进一步探索butterknife的原理。一.注解器的配置 自定义编译注解器 主要是需要继承 AbstractProcessor这个类,这里有两点要注意: ①这个类是javax扩展包下的类,它不在android提供的类里,如果直接在android app...原创 2018-05-07 16:49:46 · 422 阅读 · 0 评论 -
builder模式构建JavaBean
这几天在看顾浩鑫的《Android高级进阶》,觉得这本书写得挺不错的,作为进阶一类,设计的知识面很多。在看的时候有一个知识点讲得很好,是关于Builder模式的,之前在学习设计模式的时候通常都是分析UML类图,学一些简单的接口和实现等,关于应用方面学习得比较少,看这本书的时候,刚好有一个章节专门对Builder模式进行讲解,以及它的变种在开发中的应用。学习完之后觉得受益颇多,故将此...原创 2018-05-09 16:22:24 · 1228 阅读 · 0 评论