- 博客(354)
- 资源 (2)
- 收藏
- 关注

原创 Java容器(持续更新中)
ConcurrentModificationException在使用List.subList()取得subList后,可以使用subList修改List中的元素,但是如果List中做了修改操作,那么就不能再操作subList了(查询操作也不行),否则将报ConcurrentModificationException。因为List中有个modCount的字段,List每次有修改操作,modCou...
2019-03-13 00:14:29
170

原创 JDK和Android中设计模式的典型应用(持续更新中)
创建型模式单例模式:Runtime,Application工厂方法:Collection#iterator()抽象工厂:无建造者模式:AlertDialog$Builder原型:Object#clone(),Cloneable。结构型模式装饰者模式:BufferedInputStream,InputStream,FileInputStream组成。...
2019-03-03 15:25:27
286

原创 图解Activity启动模式、flag及其他启动属性-参考官方文档
launchMode:1.standard如果启动该Activity的context是Activity,则新建一个Activity实例,该target Activity在source Activity的Task中。如果启动改Activity的context不是Activity,则新建一个Activity实例,并创建一个新的TaskRecord。2.singleTop如果启动该Act...
2018-09-14 10:33:26
989
原创 解决android studio引用远程仓库JCenter下载慢的问题
加入国内服务器的maven仓,如图,在根目录的build.gradle的repositories块中加入一个maven阿里云的链接:http://maven.aliyun.com/nexus/content/groups/public/
2020-04-19 21:37:16
674
原创 android单元测试指定测试类型--解决在多模块多版本类型多特性的应用中进行单元测试的问题
android单元测试指定测试类型:Run->EditConfigurations->Templates->Android JUnit->Configuration点击最下面的Gradle-aware Make,点编辑按钮,在弹窗中输入:指定单元测试的版本类型,如::main:assembleDebugUnitTest...
2019-12-10 11:22:35
768
原创 Android接口测试和单元测试配置指南
添加编译依赖项配置编译变体配置编译版本Gradle 提示与诀窍使用 Lint 检查改进您的代码从命令行进行测试Testing in Java & JVM projects测试应用Android | build.gradleAndroid Plugin DSL ReferenceWriting Build Scripts...
2019-12-10 11:13:34
726
原创 Robolectric框架概述
Robolectric框架的核心作用在于使用一套在Android api的基础上修改的或者自定义的一套api,基本上是和Android api一一对应的。需要这样做的原因是,android单元测试是跑在jvm上的。优点是不用跑一次单元测试就完整的启动一个Android进程,jvm进程比Android启动快很多,调试或者运行的效率就高了。但是缺点是运行时缺少android的环境,那么需要一个...
2019-12-08 21:15:01
873
原创 单元测试之verify及使用when打桩时对ArgumentMatchers的使用
假设obj类型中有一个公有方法methodA(int, DataObject, boolean, String)1.比较方法中的所有参数是否相等verify(obj, times(1)).methodA(1, dataObject, false,);2.对方法中的所有参数使用ArgumentMatchers进行匹配verify(obj, times(1)).(Argument...
2019-11-17 11:50:55
4884
转载 反编译出现access$分析
1)static Type access$iii(Outer); 是JAVA编译器自动生成的十分重要的方法(该方法的个数由你的内部类要访问的外部类的变量个数相关),目的是:用于内部类访问外部类的数据成员时使用.2)因此:JAVA编译器在生成内部类的访问外部类的数据成员时,会自动生成代码来调用这个方法.以你的代码为例:内部类Inner中的方法public int getDate() {re...
2019-11-12 19:33:22
1901
原创 Mockito之使用Answer
目录Answer的基本用法:被测试类:DataSet.java使用场景一:模拟Cursor使用场景二:获取方法传入的参数,及验证参数或对参数断言使用场景三:获取匿名内部类,对匿名内部类进行单元测试Answer的基本用法:Subject.javapublic class Subject{ public int getInt(){ ...
2019-11-04 23:30:39
9650
原创 查看google maven仓中某个依赖有哪些版本
1.进入以下网站https://maven.google.com/web/index.html2.在输入框中输入依赖包名,如:appcompat-v7,就可以看到这个依赖包是否存在,有哪些版本参考自:https://developer.android.google.cn/studio/build/dependencies#google-maven...
2019-11-03 00:38:25
923
转载 负数在计算机中的储存方式
最近在学习位运算符时,发现负数在做带符号位的右移运算符时,结果与想象中的大不一样,经过查阅资料之后发现,原来这一切源自负数在计算机中的储存方式负数在计算机中是以补码的形式储存的注意: 本文为了简化运算,二进制数都是用一个字节——8个二进制位说明1 一些概念在进行问题探究之前,先了解一些概念1.1 原码原码就是符号位加上真值的绝对值,即8位二进制数的第一位是符号位,其余位表示值...
2019-10-24 14:54:31
3014
3
原创 Android动态加载类
1.把class文件打包成dex文件。在android-sdk/build-tool下有个dx脚本工具,可以将class文件打包成dex文件。dx --dex --no-strict --output <输出dex路径> <class文件路径>2.将dex文件放入手机中的某个路径下。3.使用DexClassLoader加载dex文件中的类。Activi...
2019-09-22 21:35:47
1063
原创 单元测试--Mockito之spy
目录spy和mock的相同点和区别:Shadow和spy的异同点:使用场景一:使用场景二:使用场景三:使用场景四:典型错误示例:spy对象和被spy对象的关系spy和mock的相同点和区别:1.得到的对象同样可以进行“监管”,即验证和打桩。2.如果不对spy对象的methodA打桩,那么调用spy对象的methodA时,会调用真实方法。3.如...
2019-09-18 11:15:27
33537
5
转载 一次性搞清楚unicode、codepoint、代码点、UTF
最近在处理字符过滤,重新研究了下字符、unicode和代码点的相关知识,首先要说一下编码的基本知识unicodeunicode unicode是计算机科学领域里的一项业界标准,包括字符集、编码方案等。计算机采用八比特一个字节,一个字节最大整数是255,还要表示中文一个字也是不够的,至少需要两个字节,为了统一所有的文字编码,unicode为每种语言中的每个字符设定了统一并且唯一的二进制编...
2019-09-09 14:50:59
1057
原创 gerrit使用指南
关于Change-IdThe Change-Id is important for Gerrit to know whether a commit that is pushed for code review should create a new change or whether it should create a new patch set for an existing change...
2019-08-31 22:10:35
2004
转载 如何解决gerrit代码冲突(git)
日常开发中,我们存在多人开发和同一个人提交多次记录的情况,这就避免不了代码冲突的情况出现。下面介绍几种gerrit提交失败的现象,后续会根据大家遇到的情况,持续更新。注意:出现合入不了,显示“cannot merge”,首先尝试下点击下页面得rebase按钮,如下:如果还是显示冲突,在使用下面的方法。情况一:报错“Submit including parents”举...
2019-08-31 22:06:26
6079
转载 HTTP1.0、HTTP1.1 和 HTTP2.0 的区别
一、HTTP的历史早在 HTTP 建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的 web 服务器上,用户端通过浏览器访问url地址来获取网页的显示内容,但是到了 WEB2.0 以来,我们的页面变得复杂,不仅仅单纯的是一些简单的文字和图片,同时我们的 HTML 页面有了 CSS,Javascrip...
2019-08-18 13:54:57
187
原创 Service中stopSelf的startId
每次调用startService都会有一个独特的startId。如果调用stopSelf(startId),则只会等待该service其他startId都被stop了,这个Service才会真正被stop。如果想直接stopService,则调用stopSelf(-1);...
2019-07-07 14:19:30
576
转载 IntentService
IntentService,可以看做是Service和HandlerThread的结合体,在完成了使命之后会自动停止,适合需要在工作线程处理UI无关任务的场景。IntentService 是继承自 Service 并处理异步请求的一个类,在 IntentService 内有一个工作线程来处理耗时操作。 当任务执行完后,IntentService 会自动停止,不需要我们去手动结束。 如果...
2019-07-07 14:15:51
12526
原创 字符串怎样写会被写入常量池
String str1 = "iloveu"; final String str3 = "finalString"; /*final */String str5 = new String("newfinalString"); public void demo2(){ //TODO: 测试字符串怎样写会被写入常量池 String str2 ...
2019-07-07 11:53:28
512
原创 Android的SQLite中使用foreign key约束
在使用约束前,比如insert前看看调用db.execSQL("PRAGMA foreign_keys = ON;");enable foreign key功能,因为默认是关闭的。SQLite文档:https://www.sqlite.org/foreignkeys.html
2019-07-03 11:45:06
701
转载 SQL 中case when ...then...else ...and用法
CASE WHEN 基本概念Case具有两种格式:简单Case函数和Case搜索函数。简单Case函数:CASE sexWHEN ‘1’ THEN ‘男’WHEN ‘0’ THEN ‘女’ELSE ‘其他’ ENDCase搜索函数:CASE WHEN sex = ‘1’ THEN ‘男’WHEN sex = ‘0’ THEN ‘女’ELSE ‘其他’ END显然,简单...
2019-06-30 19:04:33
2702
转载 关于栈,判断一个pop顺序是否符合某个特定的push顺序
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)import java.util.ArrayList; public class So...
2019-06-27 23:39:40
381
原创 类爆炸~设计模式、面向对象
以下是我对类爆炸的概念和类爆炸的产生的理解:类爆炸不是指类的具体数量的多少,而是指在实现一个功能时,类本来可以不用这么多,但是却设计成这么多,使得维护成本过高,明显高于设计的效用。类爆炸的产生原因我的理解可总结为以下几点1.我认为产生类爆炸主要是对于设计模式或者说面向对象原则的过度使用造成的,无论是面向拓展开放,面向修改封闭其他的一些面向对象设计原则的过度使用都是造成类爆炸的原因2...
2019-06-24 23:25:41
4202
1
原创 Android中使用limit子句--SQLite
SQLite 的 LIMIT 子句用于限制由 SELECT 语句返回的数据数量。语法带有 LIMIT 子句的 SELECT 语句的基本语法如下:SELECT column1, column2, columnN FROM table_nameLIMIT [no of rows]no of rows,是0-base下面是 LIMIT 子句与 OFFSET 子句一起使用时的语法...
2019-06-20 15:05:48
1972
原创 const *与* const,常量指针和指向常量的指针
* const格式:如int * const p;称为常量指针。具体语义包含以下几点:具有相当于final修饰变量时不可改变的属性。 必须在声明的同时定义 不可重新指向其他地址。#include <iostream> using namespace std; int main() { int i = 10; int j = 20; int * const ...
2019-06-15 13:48:52
230
原创 Android应用访问GPIO(针对MTK芯片)
调试先查看有没有/sys/devices/virtual/misc/mtgpio/pin,如果有,则尝试以下命令echo -wmode 48 0 > /sys/devices/virtual/misc/mtgpio/pinecho -wdir 48 1 > /sys/devices/virtual/misc/mtgpio/pinecho -wdout 48 1 > /...
2019-06-12 14:00:41
1783
转载 音视频开发进阶指南--音视频基础
FFmpeg API的介绍与使用FFmpeg的整体架构:FFmpeg的默认编译会产生四个可执行文件和8个静态库。其中四个可执行文件是在四个工具,运行在Linux或者window系统中,功能分别是, 1.ffmpeg:转码(注意转码和装封装是不一样的),推流,dump媒体文件 2.ffplay:用于播放媒体文件(包括封装格式的,和裸数据格式) 3.ffprobe:用...
2019-06-12 14:00:01
1361
原创 内存泄露分析----native 层
概念概念在wikipedia这样解读内存泄漏的:在计算机科学中,内存泄漏指由于疏忽或错误造成程序未能释放已经不再使用的内存。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。详情请看wikipedia内存泄漏。内存不是无穷无尽的,是有限的,如果申请了,使用了,用完没有释放,那么这块内存...
2019-06-12 13:59:21
6032
原创 binder通信中传递对象--利用AIDL实现传递自定义的类型
Android Service:利用Binder通信中,传递自定义类型AIDL中支持的数据类型AIDL中支持的数据类型有:支持类型 需要import 备注 Java基本类型 不需要import String, CharSequence, List, Map 不需要import List,Map内的元素必须是AIDL支持...
2019-06-12 13:59:06
1727
转载 修改系统默认自动旋转--关闭跟随系统旋转,并默认设为横屏(修改SettingProvider中的default.xml)
开机默认固定横屏,是指第一次刷机开机或恢复出厂设置,开机时Launcher固定横向。当然,想要开机动画等同样横向显示,则需修改驱动的启动部分,在此,只说说应用层的默认固定横向。 在frameworks/base/packages/SettingsProvider/res/values/defaults.xml中,<bool name="def_accelerometer...
2019-06-12 13:58:07
6450
1
原创 客制化某个项目是否编译某个apk和客制化某个项目是否运行此段代码
客制化某个项目是否编译某个apk定义一个脚本:modify_config_before_make.sh#!/bin/bashecho "================== Enter modify_config_before_make.sh ===================="modifyconfigssrcsrc=$1#PRODUCT=$2linenumber=0is...
2019-06-12 13:57:47
395
转载 ffmpeg TS DTS PTS AV_TIME_BASE
视频的显示和存放原理对于一个电影,帧是这样来显示的:I B B P。现在我们需要在显示B帧之前知道P帧中的信息。因此,帧可能会按照这样的方式来存储:IPBB。这就是为什么我们会有一个解码时间戳和一个显示时间戳的原因。解码时间戳告诉我们什么时候需要解码,显示时间戳告诉我们什么时候需要显示。所以,在这种情况下,我们的流可以是这样的:PTS: 1 4 2 3DTS: 1 2 3 4S...
2019-06-12 13:57:29
1708
转载 Android Studio的native jni so编译配置
在Android Studio中编译jni和so库,可以使用app/CMakeList.txt,也可以使用Android.mkAndroidStudio 进行 JNI / NDK 开发:初步配置及使用2017年09月08日 12:03:44阅读数:5118说干就干!JNI:Java Native Interface(Java 本地编程接口),一套编程规范,它提供了若干的 ...
2019-06-12 13:57:06
1388
原创 FFMPEG学习小结1
音视频处理包括1.采集,编码,然后就是一个常见视频文件了。2.将视频文件,进行解码,然后绘制,然后加上声音,就是视频播放了。3.视频播放方案:使用VideoView(也是MediaPlayer+SurfaceView),接口较死,支持的格式少; 使用MediaPlayer+SurfaceView,自己封装; 使用FFMPEG+SurfaceView。4.MediaPlayer使用的...
2019-06-12 13:56:49
330
原创 长按power键的流程&&PhoneWindowManager的nullpointexception导致system_server crash 导致系统重启
前面的事件派发过程就跳过了,从PhoneWindowManager开始说起安全模式简述android平台,在长按power / menu键时会快速进入一个模式选择,部分定制的平台是直接进入安装模式,也可以定制成公司需要的一些特定功能模式,比如报警 ...power 也属于全局的特殊按键,同样在PhoneWindowManager.java中被捕获处理。Po...
2019-06-12 13:56:27
713
原创 wifi连接-密码正确但连接时supplicant state返回的是ERROR_AUTHENTICATING(Android M 6.0)
frameworks\opt\net\wifi\service\java\com\android\server\wifi\WifiStateMachine.javaframeworks\base\core\java\com\android\internal\util\StateMachine.javaframeworks\base\core\java\com\android\interna...
2019-06-12 13:55:44
1878
原创 wlan mac地址 network interface IPv6 IPv4
网络接口获取:Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces(); while(interfaces.hasMoreElements()){ String name = interfaces.n...
2019-06-12 13:55:20
1498
原创 JNI使用小结
以下内容主要参考深入理解Android卷1.JNI函数动态注册:使用这个数据结构存储一个JNI函数的注册信息:typedef struct { //Java中native函数的名字,不用携带包的路径。例如“native_init“。constchar* name; //Java函数的签名信息,用字符串表示,是参数类型和返回值类型的组合。 const c...
2019-06-12 13:49:12
1499
android-all-9-robolectric-4913185-2.jar
2019-11-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人