自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 收藏
  • 关注

原创 Android 沉浸式状态栏

函数就是用来替换过时的函数 setSystemUiVisibility。setDecorfitsSystemWindows的解释。上面这一大堆,全都是过时的api,当然也能用。分别是有导航栏和无导航栏的沉浸式效果。设置状态栏颜色,设置底部导航栏颜色。可以看到函数内部已经做了版本适配。theme是必不可少的。

2024-02-19 11:13:27 641

原创 Android NDK打包armeabi平台架包

经过以上修改可以打包出armeabi架构的so。修改builde.gradle(app)1.降低NDK版本和Cmake版本。3.修改CMakeLists文件。2.降低gradle插件版本。

2023-12-29 11:32:43 833

原创 JVM基础学习

编写的java源码.java文件,通过javac转成字节码.class文件,classLoader将这些.class文件加载到JVM内存,就是运行时数据区,classLoader将.class文件的二进制数据加载到jvm内存的方法区,然后在堆区创建对应的类对象,用来封装类在方法区的数据结构。在java中不需要显式的去释放一个对象的内存,由JVM执行,有一个垃圾回收线程,低优先级,在JVM空闲和堆内存不足时,触发执行,回收那些没有被引用的实例对象,添加到回收集合中,进行回收。

2023-02-15 15:08:23 439

原创 Executor、future学习(四)

和一般的队列区别是一定至少有一个节点,头节点是不存元素的,尾节点是可以存数据的,注意,初始化的时候,头节点和尾节点是同一个,内部维持了两把锁,一把入队锁,一把出队锁用来保证线程安全,同一时刻只能有一个线程执行入队,同一时刻只能有一个线程执行出队,但是入队和出队是可以同时执行的,在内部用AtomicInterger类型变量标识当前队列中的元素个数,确保两个线程操作底层队列是线程安全的。如果队列中还有数据,那取吧,然后获取取完后队列长度,如果还有数据,唤醒其他Condition中等待取数据的线程,来拿数据。

2023-02-14 14:32:44 286

原创 Kotlin-高阶函数

通过上面可以发现,一个函数funX要作为实参传给高阶函数,标准是按照高阶函数形参的返回值类型匹配,高阶函数的返回值如果也是函数,那么funX的返回值类型要和高阶函数的返回值类型匹配,当然这个不是必须的,因我这里写的例子是就返回当前的函数,也可以自己构建别的函数。从上面可以看出定义了高阶函数,那么能传入的函数实参只要返回值对应上函数形参,就能传进来,当函数形参是不带返回值的,也能传带返回值的函数实参。高阶函数的特点:函数的参数是一个函数类型,或者函数的返回值类型是一个函数类型。再看非内联函数的打印。

2022-11-18 16:02:11 509

原创 LiveData

回到postValue,我们都知道在主线程更新liveData可以用setValue,但是在非主线程要更改liveData的值,需要用postValue,我们在上面看到了,就算用postValue,最终也是切到主线程调用setValue,那么我们就来追踪一些这个切换的过程。我们在子线程,这里有个postToMainThread,我们都知道线程的切换怎么都离不开handler,继续追踪,getInstance,会不会是一个单例呢,没错就是一个单例,切线程的方法postToMainThread。

2022-11-17 18:18:45 270

原创 Mvvm中的Lifecycle

我们回到刚刚的MainViewModel中,我们创建一个仓库层的对象,在MainViewModel的onCrate中调用仓库层的onCreate(),因为viewModel的onCreate是被观察者lifecycle的ON_START事件的回调,那么此时我们的仓库层,也就是拥有了生命周期被观察者,且我们仓库层和被观察者的ON_START事件和ON_DESTORY事件同步上了。我的理解这是一个被观察者接口,他持有一个lifecycle,这个lifecycle就是被观察者中的事件,观察者想观察的事件,

2022-11-17 16:42:12 878

原创 MVVM的构建(java&kotlin)

使用就很简单了,如果你的fragment中不涉及到数据请求获取,不需要创建ViewModel,那么直接继承ViewBingFragment,这样省的要在fragment中对xml里面的空间id进行findViewById,也能实现数据双向绑定,如果涉及到数据请求,那么就继承BaseFragment,创建一个当前fragment对应的viewModel,利用liveData的特性,在fragment中,只需要注册liveData的观察者就能接收到数据的更新。概念性的描述就不写了,直接上代码。

2022-11-17 09:54:52 1271 1

原创 Cmake

通常一个包可能包含多个组件(可以理解为多个库,例如把C++的std看成一个包的概念,那么vector就是std下的其中一个组件),我们的工程可能会依赖包下的具体某个组件,因此可以通过这个选项来检测这些组件是否存在。给下游(使用本包的其他包)使用,也就是向其他包导出依赖,这些依赖可能是本包给其他包提供的公共头文件、库,或者是本包依赖的其他包。用来查找依赖包,把一整个依赖包的头文件包含路径、库路径、库名字、版本号都获取到,可能会失败。当未找到满足条件的包(例如版本号不匹配,或指定组件未找到等),会终止。

2022-11-17 09:10:40 137

原创 JNI理解学习

java函数 String fun(int i,Class b) -----------------对应的JNI函数 “(I;签名是由java层对应函数的参数类型和返回值类型组成,原因是java支持重载,可以定义同名但不同参数的函数,JNI根据函数名是无法找到具体的函数,所以将参数类型和返回值类型组合作为一个函数的签名信息。java函数 String fun() -----------------对应的JNI函数 “()Ljava/lang/String”

2022-09-14 10:16:54 283

原创 Binder

每个线程都有一个IPCThreadState,每个IPCThreadState中都有一个mIn,mOut,mIn是用来接收来自Binder设备的数据,mOut是用来存储发往Binder设备的数据。c、client根据得到的service信息与service所在的server进程建立通信的通路,然后就可以直接与 service交互,client是service的客户端。注:TLS是Thread Local Storage线程本地存储空间的简称,这种空间每个线程都有,线程间不会共享。...

2022-08-12 11:36:53 395

原创 Handler&Looper

1Looper和HandlerLooper用于封装消息循环,并持有一个消息队列Handler封装消息投递,消息处理等接口looper.prepare1、prepare会调用线程的局部变量中设置一个Looper对象,这个调用线程就是LooperThread的run线程looper构造方法2、loop循环 looper的作用a、封装了一个消息队列b、prepare函数把Looper和调用prepare的线程绑定在一起c、处理线程调用loop函数,处理来自该消息队列的消息当事件源向Looper发消息时,其实是把消

2022-08-05 09:34:26 796

原创 ARouter in Kotlin

Arouter在kotlin项目中导入

2022-04-27 11:43:05 1343

原创 Kotlin苦海无涯(五)各种字及扩展函数

kotlin扩展函数随便新建的一个对象,这么大一堆函数可以用,现在就来一个个看看啥意思toto是一个infix函数infix不能作为一个顶级函数,必须是某个类的成员函数,也可以使用扩展函数的方式将他定义到某个类中infix必须接受且只能接受一个参数,类型没有限制就是将两个任意类型的对象,合并成一个Pair对象经典的用法有mapof打印to就是和另一个任意类型的对象合并成一个新的对象扩展函数apply内联扩.

2022-04-12 15:54:23 198

原创 Kotlin苦海无涯(四) Object

object 伴生对象,对象表达式,对象声明

2022-04-11 18:21:23 1460

原创 Kotlin苦海无涯(三)类、扩展、data class

类 构造函数,继承,内部类,data class

2022-04-11 17:42:54 2052

原创 Kotlin苦海无涯(二) inline 内联函数

inline内联函数,顺带提一句@标签

2022-04-11 16:21:34 971

原创 Kotlin 苦海无涯(一)

var val 变量和常量,in下界限定函数 out上界限定函数,经典的lambda表达式

2022-04-11 11:06:36 2186

原创 Object-Box

一款非关系型数据库优势ObjectBox占用内存1-1.5mbinsert,delete,update,load,access性能突出超快速:号称胜过测试过的所有嵌入式数据库 面向对象的 API: 没有 rows、columns 和 SQL,完全从0开始的对象(没有ORM,没有SQLite) 反应性:对数据变化的反应简单而强大,使用ObjectBox中的反应数据观察器或与RxJ...

2022-03-09 15:18:39 320

原创 根据经纬度获取当地时区,设置时区

时区除了我们经常用的东八区,新需求是根据经纬度获取当地时区,并且将设备上的时区更新到当前时区获取当前位置的经纬度是基本要求,本项目中有获取全球任意城市的天气需求,所以两个功能我就结合起来做了1、获取天气信息 Api地址Current weather data - OpenWeatherMap有几种方式获取到城市的天气,而且当前API是免费获取,我的需求是根据经纬度获取我用的是这个方法,可以获取到我所需要的尽可能详细的信息其中天气接口返回的值里面有一个关键字timezon.

2021-11-15 14:58:28 2957

原创 Android 调用导航方式

第一种:NaviParaOption para = new NaviParaOption().startPoint(pt1) .endPoint(pt2).startName("天安门").endName("百度大厦");BaiduMapNavigation.openBaiduMapNavi(para, getContext());这种方式很简单,传入两个经纬

2020-09-21 16:14:06 744

原创 Executor、future学习(三)

线程池主要有4个SingleThreadExecutor:单线程池,同时只有一个线程在跑CachedThreadPool():回收线程池,可以重复利用之前创建过的线程,运行线程最大数是Integer.MAX_VALUEFixedThreadPool():固定大小的线程池,跟回收型线程池类似,只是可以限制同时运行的线程数量ScheduledExecutorService:除了线程池的特性外,可以实现循环和延迟任务使用new Thread()的缺陷1.Java线程机制是抢占性的,new

2020-06-10 17:14:14 163

原创 RGB三合一直方图

public static Bitmap equHistogram(Mat image) {// Mat image = Imgcodecs.imread(path); //读取矩阵 List<Mat> channels = new ArrayList<>(); Core.split(image, channels);...

2020-06-10 10:40:53 579

原创 Executor、future学习(二)

Futurefuture模式的核心思想是能够让主线程将原本需要同步等待的这段时间,用来做其他的事情,因为可以异步获得执行结果,所以不用一直同步等待去获取结果future是个接口,future对具体的runnable或callable任务的执行结果进行取消,查询是否完成,获取结果,必要时可以通过get方法获取结果,该方法会阻塞直到任务返回结果先看类图主要方法:cancel:取消callable的执行get:获得callable的返回值isCanceled:判断是否取消isD

2020-06-10 10:37:08 474

原创 Executor 、future学习(一)

Android的线程池主要有4个SingleThreadExecutor:单线程池,同时只有一个线程在跑CachedThreadPool():回收线程池,可以重复利用之前创建过的线程,运行线程最大数是Integer.MAX_VALUEFixedThreadPool():固定大小的线程池,跟回收型线程池类似,只是可以限制同时运行的线程数量ScheduledExecutorService:除了线程池的特性外,可以实现循环和延迟任务使用new Thread()的缺陷1.Java线程机制是抢

2020-06-08 16:59:40 445

原创 java锁synchronized学习(二)

使用方式1.修饰一个代码块,被修饰的代码块称为同步代码块,作用范围是{}里面的部分2.修饰一个方法,被修饰的方法称为同步方法,作用范围是整个方法3.修饰一个静态方法,作用范围是整个静态方法4.修饰一个类,作用范围是synchronized后面括起来的部分使用1.修饰代码块public void method(){synchronized(this){//this表示锁是当前对象,锁可以自定义,但要实现同步必须是同一把锁}}2.修饰方法public sync

2020-06-02 18:26:03 232

原创 java锁synchronized学习(一)

2020-06-02 10:21:08 261

原创 GreenDao3.0学习(To Many)

之前项目用objectbox,现在改成greendao,记录一下自己用到的东西导入在build.gradle(app)下添加依赖implementation 'org.greenrobot:greendao:3.2.2' // 添加依赖同样在当前页面dependencies同级下添加greendao { // 指定数据库schema版本号,迁移等操作会用到 schemaVersion 3 // 设置生成数据库文件的目录,默认是在build中,可以将生成的文件放

2020-05-18 11:18:27 703

原创 Glide图片刷新

signature在项目中遇到一种情况,用Glide加载图片列表,进入下一个页面对单张图片进行操作,覆盖原图片,但是图片的地址并没有改变,返回上一个页面的时候,无论如何刷新,图片仍然是之前的图片解决方法:Glide.with(context) .asBitmap() .load(R.drawable.bg_album_default) ...

2020-05-06 14:19:09 1274

原创 设计模式学习(二)创建形模式

单例模式工厂方法模式抽象工厂模式建造者模式原型模式一、单例模式一个类只产生一个实例化对象构造方法是类进行实例化对象的必经之路,我们将构造方法用private修饰,将构造方法私有化,这个类在外部就无法new出实例化对象了构造方法私有化,无法直接new出该类的对象此时要用static方法,是属于类的方法,不需要实例化对象,也能访问,在类中加上stati...

2020-04-27 16:50:12 206

原创 设计模式学习(一)

1

2020-04-26 14:49:22 112

原创 static、final修饰符、内部类、super

staticstatic修饰符能和属性,方法,内部类一起用,表示静态的,类中的静态变量和静态方法能直接和类名一起使用,不需要新建类对象,static修饰的变量也叫类变量一个类中,一个static变量只会有一个内存空间,虽然有多个实例,但所有实例中的这个static变量会共享同一个内存空间static变量在类装载的时候就会被初始化,只要类被装载,不管是否调用了static变量,都会被初始...

2020-04-22 17:53:24 364

原创 JVM中的堆和栈学习(一)

在java里当一个对象O被创建时,它就被放在Heap里,当GC运行时,当发现没有任何引用指向O,O就会被回收以腾出空间一个对象被回收:a.没有任何引用指向该对象b.GC被运行在java中,对于简单的对象,当调用它的方法执行完毕后,指向它的引用会被从stack中popup,所以它就能在下一次GC的时候被回收堆栈 从堆和栈的功能和作用来通俗的比较, 堆主要用来存放对象的,栈主要...

2020-04-22 17:52:43 234

原创 java线程学习(一)

一:线程的生命周期及五种状态一、java线程有五种基本状态:1.新建状态(new):当线程对象创建后,就进入了新建状态,如 Thread t = new Thread();2.就绪状态(runnable):当调用线程对象的start()方法(t.start())线程进入就绪状态,处于就绪状态的线程,只是说明次线程已经做好了准备,随时等待CPU调度执行,并不是说t.start(...

2020-04-22 17:45:25 183

原创 Moudle、aar新建和导入

Moudle新建一个moudle在java文件夹下新建一个class和一个activity在MyApplication项目中,点击File--New--Import Module导入我们新建的moudle然后检查在setting.gradle中是否有我们新导入的moudle,如果没有,就把moudle加上AS高版本应该会自动刷新,我们就可以在目录上看见我...

2020-04-16 18:40:16 200

原创 二进制基本操作

1、位或 : |=两个二进制数,对应位置都为0时,为0,否则为1/** * 按位或,对应位置都为0,则为0,否则为1 */public static void fisrtOperation() { int a = 5; //0101 int b = 7; //0111 //------ a |= b; //0111...

2020-01-02 10:31:34 1707 2

原创 简单记录

支付宝支付,现在都用rsa2方式支付;生成公钥:将公钥上传至开发平台应用公钥处:然后找到pkcs8,该秘钥是用于RSA2方式填入代码中,记得查看有没有空格...

2019-06-27 10:48:25 96

原创 关于UDP接受数据报的问题

最近接手一个项目,机器会1秒钟返回一次数据,手机端UDP接受数据,在很多测试机上都可以成功接收,无奈客户的出品方是moto,偏偏就moto不能接受还一直抛出异常,在网上查阅资料,都说是阻塞的问题,继续接收就好了,但显然不是这么简单,继续接收还是接收不到数据。在百度Android接受UDP数据的时候,觉得应该是手机系统的问题。经过查询,应该是系统禁止了接受广播,以便省电等,解决方法如下:...

2018-07-31 11:59:43 560

原创 百度地图------百度infowindow重影问题记录我的

关于百度地图infowindow重影问题,可以参考

2017-12-05 14:36:50 2431 4

原创 高德地图的缩放和位移监听

最近项目采用高德地图,高德地图的文档,demo都很详细,想实现的功能基本上都有。在项目里有一个功能,是类似根据地图的中心经纬度实现数据请求。为了不无限的请求,所以要分别监听,地图的缩放,地图位移,这里就有一个方法;gadMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() )这个方法是高德地图监听地图状态改变

2017-08-04 11:02:23 23920 2

空空如也

空空如也

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

TA关注的人

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