自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Geek的专栏

--------------------------------一切事情到了最后都是好的,如果不好,说明还没到最后!

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

原创 Android-Room使用和迁移

Android Room

2022-11-12 12:53:02 1367 1

原创 FFmpeg命令

FFmpeg命令

2022-08-12 15:33:25 712

原创 MAVEN代理

maven { url ‘http://maven.aliyun.com/nexus/content/groups/public/’ }maven { url ‘http://maven.aliyun.com/nexus/content/repositories/jcenter’ }maven { url ‘http://maven.aliyun.com/nexus/content/repositories/google’ }maven { url ‘http://maven.aliyun.com/n

2021-06-28 19:44:02 175

原创 手撸BlockCanary核心部分

class BlockActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_block) initDelayHander() initPrinter() val b

2021-04-09 10:00:32 104

原创 门面模式和代理模式来解耦应用层与子系统服务

门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,门面模式提供一个高层次的接口,使得子系统更易于使用代理模式为其他对象提供一种代理以控制对这个对象的访问应用图...

2021-04-08 17:09:02 126

原创 Android 跨进程通信-AIDL实战

需求描述进程A调起第三方进程B进行第三方登录 – 实现双向通信代码(进程A)目录结构LoginActivity.javapublic class LoginActivity extends AppCompatActivity { private ILoginInterface iLogin; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate

2021-04-08 13:27:36 162

原创 JVM-方法栈

原理图解释1:为什么递归会导致OOM?因为每个方法对应一个栈帧,每个方法执行完成之后才会出栈,递归的方法只有递归完之后才会将所有方法出栈,所以容易产生OOM解释2:程序计数器和方法栈是线程私有的。解释3:JAVA字节码含义源码class Person { public static void main(String[] args) { Person p = new Person(); p.work(); } public int wo

2020-12-14 20:38:34 816

原创 Android MAT内存泄露分析

工具准备MAT下载地址https://www.eclipse.org/downloads/download.php注意:Android系统版本太低会导致分析内存泄露信息拿不到步骤使用Profile工具查看是否有内存泄露的存在将第一步生成的hprof文件,使用hprof-conv工具转换成标准文件,便于MAT工具分析hprof-conv -z [infile][outfile]步骤2命令生成的文件导入MAT工具下图为去除除了强引用以外的引用,便于分析下图显示的就是引用

2020-12-07 18:19:35 314

原创 Kotlin注解

如何定义注解在类前面增加annotation即可annotation class Anno2(val bar:String) {}元注解与JAVA类似。Retention表示注解用途;Target表示注解作用位置

2020-12-04 14:29:33 320

转载 Android之Token

token在创建ActivityRecord的时候一起被创建,他是一个IBinder对象,实现了接口IApplicationToken。token创建后会发送到WMS,在WMS中封装成WindowToken,并存在一个HashMap<IBinder,WindowToken>。token会随着ActivityRecord被发送到本地进程,ActivityThread根据AMS的指令执行Activity启动逻辑。Activity启动的过程中会创建PhoneWindow和对应的...

2020-12-03 20:21:46 977

原创 Kotlin反射

KclassKotlin的KClass和java的Class可以看作同一个含义的类型,并且可以通过.java 和.kotlin方法在KClass和Class之间互相转化。isCompanion : 是否是伴生对象isData : 是否是数据类isSealed : 是否是密封类objectInstance : object实例(如果是object)companionObjectInstance : 伴生对象实例declaredMemberExtensionFunctions : 扩展函数de

2020-12-02 19:53:21 252

转载 java泛型上界通配符<? extends T>和下界通配符<? super T>

转载地址

2020-12-02 16:20:45 256

原创 Kotlin之Lambda优化inline篇

问题来源Kotlin每声明一个Lambda表达式,就会在字节码中产生一个匿名类,该匿名类包含了一个invoke方法,作为Lambda的调用方法,每次调用的时候,还会创建一个新对象。解决方案为了解决Lambda的开销问题。Kotlin引入了内联函数(inline),内联函数在编译期被嵌入每一个被调用的地方,以减少额外生成的匿名函数,以及函数执行的时间开销。案例未使用inline声明lambdaclass LambdaDemo { fun main(args: Array<Strin

2020-12-01 21:08:48 376

原创 手写findViewById,其实就是个递归

public class FindView { public double mId; public FindView[] mChildren; public FindView findViewById(double id) { if (mId == id) { return this; } if (mChildren != null) { for (int i = 0; i <

2020-11-20 20:12:34 140

原创 Kotlin中Standard.kt的函数(let,with,run,apply,also)

内联扩展函数let1.源码// block: lambda函数块->lambda表达式的参数是对象T// 返回值:lambda函数块最后一行或指定retur表达式public inline fun <T, R> T.let(block: (T) -> R): R { // this指当前对象T return block(this)}2.转成JAVApublic final Object let(Object $this$let, @NotNull Funct

2020-11-18 19:32:30 365 1

原创 《Kotlin核心编程》笔记--第5章 类型系统

自动装箱与拆箱Kotlin中Int类型 等同于 JAVA中的 intKotlin中Int?类型 等同于 JAVA中的 Integer类型擦除存在原因:JAVA之所以存在类型擦除是为了保证向后兼容,因为JAVA泛型是JAVA1.5之后引入的,在1.5之前没有泛型。使用类型擦除保证了新老版本在编译后的字节码能够保持一致。这样低版本编译的class文件在高版本的JVM上也能够运行。Kotlin也是通过类型擦除来实现泛型的。...

2020-11-18 15:00:02 137

转载 软键盘顶起DialogFragment的问题

转载https://www.cnblogs.com/mr-wang1/p/13265827.html@Overridepublic void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Black_NoTitleBar_Fullscreen);}

2020-09-23 17:33:05 1762

原创 Java LinkedHashMap

总结LinkedHashMap就是对HashMap的扩展,它保留了HashMap的所有特性,里面维护了双向链表,使得HashMap里面的数据有顺序。顺序: 插入顺序 和 访问顺序。取决于accessOrder插入顺序 : accessOrder=false , 每次增加数据都会添加到双向链表的尾部访问顺序 : accessOrder=true , 最新访问的数据都会调整到双向链表的尾部源码参考https://blog.csdn.net/u014634338/article/details/7

2020-05-10 18:27:09 109

原创 Thread.join()方法

1. 引言对于这个方法,开发过程中使用的很少,一直都不明白其中的原理,今天看了下源码,一目了然了。2. 源码3. 案例3.1 运行结果JoinThread run方法执行了main 执行完毕

2020-05-09 13:31:49 136

原创 MVP框架搭建

MVP学过Android的至少应该略知一二,废话不说,直接上代码View层public abstract class BaseView<P extends BasePresenter, CONTRACT> extends AppCompatActivity { protected P p; @Override protected void onCreat...

2020-03-24 17:09:46 261 1

原创 CopyOnWriteArrayList

链接:https://blog.csdn.net/u010002184/article/details/90452918总结:1.读不加锁、写加锁、做到读写分离;2.可以并发读;3.只能保证数据的最终一致性,不能保证数据的实时一致性;4.内存占用多,写的时候会拷贝一份数组。...

2020-01-20 14:18:18 188

原创 Android 8.0应用图标的适配

转自:https://blog.csdn.net/guolin_blog/article/details/79417483

2020-01-19 20:40:19 162

原创 JNI-开发注意细节点

局部引用问题1.一个局部引用仅在创建它的native函数及该函数调用的函数中有效。在一个native函数执行期间创建的所有局部引用将在该函数返回时被释放。2.千万不要写一个native函数来保存一个局部引用在静态变量或全局变量中并期望在以后的函数调用中使用。// instance是一个局部引用,不能使用1中的方式进行赋值。当该函数返回后,将释放// 包含在this->instance...

2020-01-10 11:28:14 215

原创 JNI-引用

引用分类JNI引用的分类即 jobject的分类在JNI中属于jobject类型的有:1.局部引用 本地方法栈内有效2.全局引用 虚拟机全局生效 不会被GC回收3.弱全局引用 虚拟机全局生效GC时被回收局部引用下面方法的返回值都是属于局部引用 1.方法的jobject参数 2.FindClass 3.GetObjectClass 4.GetObjectField 5....

2019-12-03 21:13:59 137

原创 JNI-数据类型

JNI系统类型JNIEnv指的是当前线程上下文 并不是虚拟机上下文基本数据类型1.java类型预jni类型的对应关系2. jni类型与C语言对应关系,注意jstring其实是jobject类型,而jobject对应C语言的void*所以不能直接对jstring通过字符串的方式使用3. JNI中如何使用jstring引用类型1.JNI内部描述解释:type[] 表示数组类型...

2019-12-03 17:50:54 152

原创 makefile构建系统变量

Android.mkTARGET_ARCH: 目标CPU体系结构的名称,例如armTARGET_PLATFORM:目标Android平台的名称,例如:android-22TARGET_ARCH_ABI:目标CPU体系结构和ABI的名称,例如:armeabi-v7aTARGET_ABI:目标平台和ABI的串联,例如:android-22-armeabi-v7a!LOCAL_MODULE...

2019-12-03 14:43:50 285

原创 CMake命令

1.aux_source_directory#查找当前目录所有源文件,并将源文件名称列表保存到DIR_SRCS变量 (不能查找子目录)aux_source_directory(. DIR_SRCS)2.添加一个库或预编译库#添加一个库,名为<name>。指定STATIC,SHARED,MODULE参数来指定库的类型。STATIC:静态库;SHARED:动态库,#MODULE...............

2019-12-03 11:45:04 1531

原创 CMake初识

1.什么是CMake1.在Android Studio2.2及以上,构建原生库的默认工具是CMake。2.CMake是一个跨平台的构建工具,可以用简单的语句来描述所有平台的安转(编译过程)。能够输出各种各样的makefile或者project文件。CMake并不直接构建初最终的软件,而是产生其他工具的脚本,然后再依据这个工具的构建方式使用。3.CMake是一个比make更高级的编译配置工具............

2019-12-02 17:52:02 265

原创 shell编程--函数

1.函数定义funcname(){ 方法体}或[function] funcname[()]{ 方法体; [return int;]}[]里面的可以省略2.函数参数#!/bin/bashtest() { j=1; for((i=1;i<=$1;i++)) do j=`expr $i ...

2019-11-29 11:42:42 133

原创 shell编程--运算符详解

1.分类算数运算符 关系运算符 布尔运算符 字符串运算符 文件测试运算符2.说明1.算数运算符2.关系运算符注:关系运算符只支持数字,不支持字符串,除非字符串的值是数字3.逻辑运算符4.布尔运算符5.字符串运算符6.文件测试运算符...

2019-11-28 20:55:00 194

原创 shell编程--if语句

1.语法if(表达式); then #to doelse #to dofi2.案例#!/bin/bashnum1=100num2=200if(($num1>$num2));then echo "num1大于num2"else echo "num1小于num2"fi# 判断指定目录是否存在#!/bin/bashif [ ! -...

2019-11-28 15:36:51 151

原创 shell编程--循环语句

案例1: 遍历#!/bin/bashfor i in `seq 1 15`do echo $idone案例2:for累加#!/bin/bashj=0for ((i=0;i<100;i++))do j=`expr $i + $j`doneecho $j案例3:遍历文件打包#!/bin/bashfor i in `find . -n...

2019-11-28 14:47:46 131

原创 shell编程--变量的定义

1.shell脚本的撰写开头必须是 #!/bin/bash# 变量定义:弱类型变量A=10 # =前面和后面不能有空格echo $A #输出A执行脚本命令 ./bash 脚本名2.环境变量$0 : 表示当前程序的名称$n:程序的输入参数n=1 第一个参数 n=2 第二个参数$*:所有的输入参数$#:输入参数的个数$?:命令执行的状态一般返回0 代表成功 echo $...

2019-11-28 12:25:48 184

原创 Android.mk介绍

1.简介1.Android.mk是一个向Android NDK构建系统描述NDK项目的GNU makefile片段。主要用来编译生成一下几种: 1.APK程序:一般的Android应用程序,系统级别的直接push即可。 2.JAVA库:JAVA类库,编译打包生成jar文件。 3.C\C++应用程序:可执行的C\C++应用程序。 4.C\C++静态库:编译生成C\C++静态库,并打包成.a.........

2019-11-28 11:23:00 848

原创 makefile初识

1.定义1.makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要重新编译,如何进行链接等操作。2.makefile就是自动化编译,告诉make命令如何编译和链接。2.makefile规则1.target:目标文件。可以是objectfile,也可以是执行文件,还可以是标签文件2.prerequisites: 依赖文件,即要生成那个target所需要的文件或其他ta...

2019-11-27 21:33:08 199

原创 C++静态库与动态库

1.静态库1.静态库实际上就是一些目标文件(一般以.o结尾)的集合,静态库一般以.a结尾,只用于生成可执行文件阶段。2.在链接步骤中,链接器将从库文件取得所需代码,复制到生成的可执行文件中。这种库称为静态库。其特点是可执行文件中包含了库代码的一份完整拷贝,在编译过程中被载入程序中。缺点就是多次使用就会有多份拷贝,并且对程序的更新、部署和发布会带来麻烦,如果静态库有更新,那么所有使用它的程序.....................

2019-11-27 15:47:10 176

原创 C++编译流程

编译流程:1. 预处理 1. 完成宏替换、文件引入、以及去除空行、注释等,为下一步的编译做准备。 2. 对各种预处理命令进行处理,包含头文件的包含、宏定义的扩展、条件编译的选择等。 命令:`gcc -E test.c -o test.i ` -E是让gcc在预处理结束后停止编译,test.c为源代码文件,test.i为预处理后输出的文件2. 编译1. 讲预处理后的代码编译成汇编代...

2019-11-26 22:01:58 399 1

原创 C++容器

序列式容器元素排列顺序与元素本身无关,由添加顺序决定vector list dequeue queue stack priority queue vector<int> vec_1; // 声明有一个元素的空间 vector<int> vec_2(1); // 6个元素,值都是1 vector<int> vec_3(6, ......

2019-11-25 22:30:27 87

原创 C++虚函数、纯虚函数、引用与指针区别

class Parent {private: int i;public: void show();};void Parent::show() { cout<< "parent" << endl;}class Child : public Parent{private: int i;public: void show...

2019-11-25 21:29:52 101

原创 C+ 类 常量函数、友元函数、单例

常量函数 表示不允许修改类中的成员int i,j //类中的成员void Student::set(int j) const { this->j = j; // 错误 cout<<i<<endl; // 正确}友元函数在定义一个类的时候,可以把一些函数(包括全局函数和其他类的成员函数)声明为“友元”或一些类声明为友元,这样这些函数就成...

2019-11-24 00:15:06 174

空空如也

空空如也

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

TA关注的人

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