学习记录
文章平均质量分 80
Erwooow
这个作者很懒,什么都没留下…
展开
-
Android NDK打包armeabi平台架包
经过以上修改可以打包出armeabi架构的so。修改builde.gradle(app)1.降低NDK版本和Cmake版本。3.修改CMakeLists文件。2.降低gradle插件版本。原创 2023-12-29 11:32:43 · 838 阅读 · 0 评论 -
JVM基础学习
编写的java源码.java文件,通过javac转成字节码.class文件,classLoader将这些.class文件加载到JVM内存,就是运行时数据区,classLoader将.class文件的二进制数据加载到jvm内存的方法区,然后在堆区创建对应的类对象,用来封装类在方法区的数据结构。在java中不需要显式的去释放一个对象的内存,由JVM执行,有一个垃圾回收线程,低优先级,在JVM空闲和堆内存不足时,触发执行,回收那些没有被引用的实例对象,添加到回收集合中,进行回收。原创 2023-02-15 15:08:23 · 439 阅读 · 0 评论 -
Executor、future学习(四)
和一般的队列区别是一定至少有一个节点,头节点是不存元素的,尾节点是可以存数据的,注意,初始化的时候,头节点和尾节点是同一个,内部维持了两把锁,一把入队锁,一把出队锁用来保证线程安全,同一时刻只能有一个线程执行入队,同一时刻只能有一个线程执行出队,但是入队和出队是可以同时执行的,在内部用AtomicInterger类型变量标识当前队列中的元素个数,确保两个线程操作底层队列是线程安全的。如果队列中还有数据,那取吧,然后获取取完后队列长度,如果还有数据,唤醒其他Condition中等待取数据的线程,来拿数据。原创 2023-02-14 14:32:44 · 287 阅读 · 0 评论 -
LiveData
回到postValue,我们都知道在主线程更新liveData可以用setValue,但是在非主线程要更改liveData的值,需要用postValue,我们在上面看到了,就算用postValue,最终也是切到主线程调用setValue,那么我们就来追踪一些这个切换的过程。我们在子线程,这里有个postToMainThread,我们都知道线程的切换怎么都离不开handler,继续追踪,getInstance,会不会是一个单例呢,没错就是一个单例,切线程的方法postToMainThread。原创 2022-11-17 18:18:45 · 274 阅读 · 0 评论 -
Mvvm中的Lifecycle
我们回到刚刚的MainViewModel中,我们创建一个仓库层的对象,在MainViewModel的onCrate中调用仓库层的onCreate(),因为viewModel的onCreate是被观察者lifecycle的ON_START事件的回调,那么此时我们的仓库层,也就是拥有了生命周期被观察者,且我们仓库层和被观察者的ON_START事件和ON_DESTORY事件同步上了。我的理解这是一个被观察者接口,他持有一个lifecycle,这个lifecycle就是被观察者中的事件,观察者想观察的事件,原创 2022-11-17 16:42:12 · 879 阅读 · 0 评论 -
MVVM的构建(java&kotlin)
使用就很简单了,如果你的fragment中不涉及到数据请求获取,不需要创建ViewModel,那么直接继承ViewBingFragment,这样省的要在fragment中对xml里面的空间id进行findViewById,也能实现数据双向绑定,如果涉及到数据请求,那么就继承BaseFragment,创建一个当前fragment对应的viewModel,利用liveData的特性,在fragment中,只需要注册liveData的观察者就能接收到数据的更新。概念性的描述就不写了,直接上代码。原创 2022-11-17 09:54:52 · 1281 阅读 · 1 评论 -
Cmake
通常一个包可能包含多个组件(可以理解为多个库,例如把C++的std看成一个包的概念,那么vector就是std下的其中一个组件),我们的工程可能会依赖包下的具体某个组件,因此可以通过这个选项来检测这些组件是否存在。给下游(使用本包的其他包)使用,也就是向其他包导出依赖,这些依赖可能是本包给其他包提供的公共头文件、库,或者是本包依赖的其他包。用来查找依赖包,把一整个依赖包的头文件包含路径、库路径、库名字、版本号都获取到,可能会失败。当未找到满足条件的包(例如版本号不匹配,或指定组件未找到等),会终止。原创 2022-11-17 09:10:40 · 137 阅读 · 0 评论 -
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 · 804 阅读 · 0 评论 -
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 阅读 · 0 评论 -
根据经纬度获取当地时区,设置时区
时区除了我们经常用的东八区,新需求是根据经纬度获取当地时区,并且将设备上的时区更新到当前时区获取当前位置的经纬度是基本要求,本项目中有获取全球任意城市的天气需求,所以两个功能我就结合起来做了1、获取天气信息 Api地址Current weather data - OpenWeatherMap有几种方式获取到城市的天气,而且当前API是免费获取,我的需求是根据经纬度获取我用的是这个方法,可以获取到我所需要的尽可能详细的信息其中天气接口返回的值里面有一个关键字timezon.原创 2021-11-15 14:58:28 · 2975 阅读 · 0 评论 -
Executor、future学习(三)
线程池主要有4个SingleThreadExecutor:单线程池,同时只有一个线程在跑CachedThreadPool():回收线程池,可以重复利用之前创建过的线程,运行线程最大数是Integer.MAX_VALUEFixedThreadPool():固定大小的线程池,跟回收型线程池类似,只是可以限制同时运行的线程数量ScheduledExecutorService:除了线程池的特性外,可以实现循环和延迟任务使用new Thread()的缺陷1.Java线程机制是抢占性的,new原创 2020-06-10 17:14:14 · 164 阅读 · 0 评论 -
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 · 581 阅读 · 0 评论 -
Executor、future学习(二)
Futurefuture模式的核心思想是能够让主线程将原本需要同步等待的这段时间,用来做其他的事情,因为可以异步获得执行结果,所以不用一直同步等待去获取结果future是个接口,future对具体的runnable或callable任务的执行结果进行取消,查询是否完成,获取结果,必要时可以通过get方法获取结果,该方法会阻塞直到任务返回结果先看类图主要方法:cancel:取消callable的执行get:获得callable的返回值isCanceled:判断是否取消isD原创 2020-06-10 10:37:08 · 479 阅读 · 0 评论 -
Executor 、future学习(一)
Android的线程池主要有4个SingleThreadExecutor:单线程池,同时只有一个线程在跑CachedThreadPool():回收线程池,可以重复利用之前创建过的线程,运行线程最大数是Integer.MAX_VALUEFixedThreadPool():固定大小的线程池,跟回收型线程池类似,只是可以限制同时运行的线程数量ScheduledExecutorService:除了线程池的特性外,可以实现循环和延迟任务使用new Thread()的缺陷1.Java线程机制是抢原创 2020-06-08 16:59:40 · 447 阅读 · 0 评论 -
java锁synchronized学习(二)
使用方式1.修饰一个代码块,被修饰的代码块称为同步代码块,作用范围是{}里面的部分2.修饰一个方法,被修饰的方法称为同步方法,作用范围是整个方法3.修饰一个静态方法,作用范围是整个静态方法4.修饰一个类,作用范围是synchronized后面括起来的部分使用1.修饰代码块public void method(){synchronized(this){//this表示锁是当前对象,锁可以自定义,但要实现同步必须是同一把锁}}2.修饰方法public sync原创 2020-06-02 18:26:03 · 235 阅读 · 0 评论 -
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 · 704 阅读 · 0 评论 -
Glide图片刷新
signature在项目中遇到一种情况,用Glide加载图片列表,进入下一个页面对单张图片进行操作,覆盖原图片,但是图片的地址并没有改变,返回上一个页面的时候,无论如何刷新,图片仍然是之前的图片解决方法:Glide.with(context) .asBitmap() .load(R.drawable.bg_album_default) ...原创 2020-05-06 14:19:09 · 1278 阅读 · 0 评论 -
设计模式学习(一)
1原创 2020-04-26 14:49:22 · 114 阅读 · 0 评论 -
java锁synchronized学习(一)
一原创 2020-06-02 10:21:08 · 262 阅读 · 0 评论 -
java线程学习(一)
一:线程的生命周期及五种状态一、java线程有五种基本状态:1.新建状态(new):当线程对象创建后,就进入了新建状态,如 Thread t = new Thread();2.就绪状态(runnable):当调用线程对象的start()方法(t.start())线程进入就绪状态,处于就绪状态的线程,只是说明次线程已经做好了准备,随时等待CPU调度执行,并不是说t.start(...原创 2020-04-22 17:45:25 · 183 阅读 · 0 评论 -
JVM中的堆和栈学习(一)
在java里当一个对象O被创建时,它就被放在Heap里,当GC运行时,当发现没有任何引用指向O,O就会被回收以腾出空间一个对象被回收:a.没有任何引用指向该对象b.GC被运行在java中,对于简单的对象,当调用它的方法执行完毕后,指向它的引用会被从stack中popup,所以它就能在下一次GC的时候被回收堆栈 从堆和栈的功能和作用来通俗的比较, 堆主要用来存放对象的,栈主要...原创 2020-04-22 17:52:43 · 234 阅读 · 0 评论 -
static、final修饰符、内部类、super
staticstatic修饰符能和属性,方法,内部类一起用,表示静态的,类中的静态变量和静态方法能直接和类名一起使用,不需要新建类对象,static修饰的变量也叫类变量一个类中,一个static变量只会有一个内存空间,虽然有多个实例,但所有实例中的这个static变量会共享同一个内存空间static变量在类装载的时候就会被初始化,只要类被装载,不管是否调用了static变量,都会被初始...原创 2020-04-22 17:53:24 · 366 阅读 · 0 评论 -
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 阅读 · 0 评论 -
二进制基本操作
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 · 1708 阅读 · 2 评论 -
时间转字符串,时间比较
package com.example.maptest.mycartest.Utils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date;/** * Created by ${Author} on 2017/3/24. * Use to */publi原创 2017-04-12 18:35:19 · 325 阅读 · 0 评论 -
SeekBar设置最小值
seekbar如何设置最小值???项目需求,要让seekbar的最小值为60,大家都知道如何设置初始值,最大值,但是最小值,我在网上查了一些资料。并不需要网上说的那么复杂。例如我的需求是seekbar的范围是60 -- 85,最小值要为60;android:max="25"我将seekbar的最大值设为25;public void onProgressChang原创 2017-04-29 14:15:56 · 14496 阅读 · 9 评论 -
android6.0,百度地图运行时权限。
采用网上的开源框架:https://github.com/k0shk0sh/PermissionHelper/blob/master/app/src/main/java/com/fastaccess/permission/sample/SampleFragment.java使用非常方便。6.0以上的百度地图开发,权限出了在fragment里面申请权限,百度地图网站给出的权限,还需要在清单文原创 2017-04-20 18:44:15 · 2103 阅读 · 1 评论 -
Android 调用导航方式
第一种:NaviParaOption para = new NaviParaOption().startPoint(pt1) .endPoint(pt2).startName("天安门").endName("百度大厦");BaiduMapNavigation.openBaiduMapNavi(para, getContext());这种方式很简单,传入两个经纬原创 2020-09-21 16:14:06 · 748 阅读 · 0 评论 -
记载
1.git上面很好用的一款设置沉浸式状态栏的开源库http://jaeger.itscoder.com/android/2016/03/27/statusbar-util.html,2.设置textview的背景设置角度:topLeftRadius,左上角bottomLeftRadius,左下角topRightRadius,右上角bottomRightRad原创 2017-07-13 17:56:41 · 207 阅读 · 0 评论 -
高德地图的缩放和位移监听
最近项目采用高德地图,高德地图的文档,demo都很详细,想实现的功能基本上都有。在项目里有一个功能,是类似根据地图的中心经纬度实现数据请求。为了不无限的请求,所以要分别监听,地图的缩放,地图位移,这里就有一个方法;gadMap.setOnCameraChangeListener(new AMap.OnCameraChangeListener() )这个方法是高德地图监听地图状态改变原创 2017-08-04 11:02:23 · 23929 阅读 · 2 评论 -
百度地图------百度infowindow重影问题记录我的
关于百度地图infowindow重影问题,可以参考原创 2017-12-05 14:36:50 · 2437 阅读 · 4 评论 -
关于UDP接受数据报的问题
最近接手一个项目,机器会1秒钟返回一次数据,手机端UDP接受数据,在很多测试机上都可以成功接收,无奈客户的出品方是moto,偏偏就moto不能接受还一直抛出异常,在网上查阅资料,都说是阻塞的问题,继续接收就好了,但显然不是这么简单,继续接收还是接收不到数据。在百度Android接受UDP数据的时候,觉得应该是手机系统的问题。经过查询,应该是系统禁止了接受广播,以便省电等,解决方法如下:...原创 2018-07-31 11:59:43 · 562 阅读 · 0 评论 -
记录
防止键盘把布局顶上去:方法一:在你的activity中的oncreate中setContentView之前写上这个代码getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);方法二:在项目的AndroidManifest.xml文件中界面对应的里加入android:window转载 2017-03-22 10:41:10 · 210 阅读 · 0 评论