- 博客(80)
- 资源 (1)
- 收藏
- 关注
原创 Android端连接ActiveMQ服务器
记录一下Android作为客户端去连接ActiveMQ服务时,存在的问题。MQTTmqtt比较简单,有较为成熟的库MqttAndroidClient;repositories { maven { url "https://repo.eclipse.org/content/repositories/paho-snapshots/" }}dependencies { compile 'org.eclipse.paho:org.eclipse.paho.cli
2022-01-07 14:19:35
2441
原创 LiveData浅析
LiveData是Jetpack中的重要一环,在MVVM架构中承担着核心的位置。但我们暂时不去理会它在整个架构中的发挥,而是来关注其本质——LiveData本质是一个被观察者,即Observable。
2021-05-08 20:50:56
523
2
原创 throttle/debounce应用及原理
“防抖”一词经常让人联想到“摄像头防抖”之类的技术,不过摄像头所说的防抖是补偿式、阻尼式的防抖动,是实实在在的防“抖动”,软件上的防抖动其实更多是指“控制频率”。软件上的防抖和节流虽然往往是一体的,但还是先大致分清其区别:防抖频次过高的数据丢掉,仅保留频次低的数据;节流单位时间或空间内,仅保留一次数据;两者均可以理解为按制定的规则过滤重复项,以达到控制事件触发频率的目的。防抖的规则是过滤掉频次过高的数据项,只要频次过高的数据均视为无效数据;节流的规则是每个单位时间内都要保留一次有效数据;
2021-04-02 10:54:24
1345
原创 JNI实用笔记
cmake配置构建方式从ndk-build转到cmake,目前感觉良好。cmake配置:#设置最小 cmake 版本cmake_minimum_required(VERSION 3.4.1)project (start)#命名start动态库,最终生成libstart.soadd_library(start SHARED src/main/cpp/start.cpp)#查找本地库find_library(xter start)#原生库及log日志相关库target_link_libra
2021-03-29 17:14:10
700
原创 PCM静默检测
静默检测首先要能计算某段音频数据的音量大小,那么首先有一个公式明确:dB = 20 * log(P1/P2)其中P1/P2可以看作一个整体的阈值;当声音采样深度为16bit时,P1/P2 = 65535,即dB ≈ 96;当不确定P1/P2具体值时,那么就有dB = 20 * log(音频数据)另外,音频数据大小也有一个公式可表示:数据量(字节/秒) = 采样率(Hz) * 采样大小(bit) * 声道数 / 8这里有一个JAVA表示的计算分贝方法: /** * 计算输入数据段
2020-08-12 15:56:59
2131
原创 kotlin作用域函数
官方释义作用域函数:Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。共有以下五种:let、run、with、apply 以及 also。当前使用的kotlin版本为1.3.72;用官方的区别方式,主要从上下文对象引用方式和返回值加以区分:函数引用方式返回值runthis函数执行结果wi
2020-07-27 17:42:21
959
原创 正则替换group(n)内容
正则替换指定内容本来应该是一件挺容易的事情,但由于某些原因,替换指定group的内容得自己实现。先设定一个需求,把下面字符串第1个的01换成1234,第2个01换成2345,当然也可能会有更多的01或者其他字符串: String hex = "00 00 00 01 00 01"; String regex = "[0-9a-zA-Z\\s]{6}[0-9a-zA-Z]{2}\\s([0-9a-zA-Z]{2})\\s[0-9a-zA-Z]{2}\\s([0-9a-zA-Z]{2})";正则中
2020-06-15 18:04:21
1555
原创 关于Kotlin泛型遇到的问题
Java里有?、extends、super;Kotlin里有*、out、in;虽然表示方法不同,但其实可以认为是分别对应且等价的;...
2020-05-09 15:37:17
1697
原创 写一个定时自检
有一个后台程序需要这么一个功能:需要知道自己什么时候进入稳定状态。我原来用一种沙雕方式实现的,即开一个线程让一个计数器定时自增,自增到某个数即表示已经进入稳定状态,如果中间有打破这种状态的操作,那么就让计数器重置为0: public static AtomicInteger STABLE_TIMER = new AtomicInteger(0); taskExecutors.exec...
2020-05-07 17:25:33
309
原创 关于线程池中终止任务
使用线程池本身删除或终止任务,有一个必须的前提:任务必须存在于队列之中。为什么这么说?是因为我们所谓的“删除任务”是指ThreadPoolExecutor的remove方法: public boolean remove(Runnable task) { boolean removed = workQueue.remove(task); tryTermi...
2020-04-27 17:22:42
8971
原创 JNA加载DLL及在jar中的运用
文章目录需求相关DLL相关JNA相关使用JNA加载DLL在jar中使用JNA加载DLL需求相关需求使用JNI方式加载DLL,并封装为SDK供他人使用。方法原生JNI方式调用JNA框架原生JNI方式适合自行定制的dll,也就是在拥有dll源码的情况下,可操作性比较强;不过如果方法太多以及涉及结构体之类,需要自己手写许多类型转换JNA通用于各种场景,在类型转换上比较省功夫,...
2020-02-05 16:48:17
4914
3
原创 使用gradle发布文件到maven仓库
uploadArchives { repositories { mavenDeployer { repository(url: "http://repo.apcos.com/repository/apcos-snapshot/") { authentication(userName: "xxxx", password:...
2019-12-27 15:01:00
1175
1
原创 class文件格式的理解
以前了解JVM相关知识时,对类文件结构仅仅是一瞥而过,并未仔细去深究,实在不应该。于是最近找了个闲暇,来仔细理解一下。先不谈各种定义,就现象而言,class文件只是开发者编译java文件产生的产物,且这个产物是供JVM阅读的。class文件于Java程序员自然随手可拾,当使用文本编辑器打开的时候却是这样的:cafe babe 0000 0034 003d 0a00 1100 2909001...
2019-12-14 12:27:50
712
1
原创 使用Gson解析错误json数据
在拉取数据时,有时候会遇到一些错误数据导致整张表都无法正常存储的情况,比如这种错误:com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Invalid long: "null"原json数据是这样的: { "id": "120207568323752...
2019-12-05 16:37:50
3208
原创 关于Netty精简
netty使用的jar包对于部分平台来说太大了,所以拿到源码后自行精简了一下。适用于安卓端。保留目录为:最终生成jar包:可自行测试,基础的TCP/UDP等通讯功能保留,去除了大量PooledBuffer及工具类。链接地址:netty-slim.jar...
2019-11-28 09:25:58
455
原创 Netty在无Internet网络状况下的连接建立超时
首先记录下结果,都是寻找DNS的锅。测试代码: public void testFlow(){ EventLoopGroup group = new NioEventLoopGroup();// try { Bootstrap bootstrap = new Bootstrap() .group(group) ....
2019-11-12 17:40:16
423
原创 利用IDE打jar包
一切操作基于IntelliJ IDEA。打jar包可以直接使用IDE来完成。第一步:第二步:第三步:最后就是生成了:生成的路径一般在项目根目录(非module)下的build\classes\artifacts下。用这种方式打jar包,是默认直接将依赖的第三库也打入jar包中的,包括使用远程仓库依赖的方式。并且有可视化界面可供操作:...
2019-11-02 18:13:25
1004
原创 关于定时上报数据的无头无尾问题
/** * 问题:为一组定时上报的消息加上开始与结束标志,即当一个消息不再定时上报时,作为其结束标志 */public class EndDemo { public static void main(String[] args) { EndDemo demo = new EndDemo(); try { for (int i = 0; i < 20; i++) {...
2019-10-12 16:03:16
301
原创 关于gradle多渠道打包的命名
使用gradle多渠道打包也不是什么新鲜事了,配置productFlavors就完事了,再写点buildConfigField什么的,似乎也就可以用了。用确实是可以用,但遇上某天想改打包出来的名字就很尴尬了,不知道怎么改。使用本来在build.gradle有这样的配置:android { productFlavors { jinxin_bcca { ...
2019-09-23 18:19:52
795
原创 IDEA无法选择新安装字体
原来使用IDEA的时候遇到过一个问题:在win10系统中,新安装在系统中的字体,在IDEA中根本显示不出来,怎么调设置都调不出来。先说结果,如果遇到这种问题,能够确定IDEA中的设置没什么毛病的,请直接怀疑是系统问题:需要【为所有用户安装】。就像这样:如果只是单纯的点击安装,然后按照一般流程安装的话,是不能显示在IDEA字体选择框中显示出来的,哪怕是按照标准流程【安装】–【重启IDE】也不...
2019-09-22 18:21:29
4389
原创 ByteBuffer注意事项
因为使用通信框架不同的缘故,bytebuffer这种东西在每个框架中都有可能是不同的,比如在Mina中叫IoBuffer,在Netty中叫ByteBuf,虽然叫法不同,但其实用法相似。有时候为了方便,就直接使用java内置的ByteBuffer了。所以了解ByteBuffer的使用,触类旁通也会变得很容易了。在一些容易混淆的问题产生之前,先复习一下常用场景下的基本使用。创建: public...
2019-09-15 16:44:10
677
原创 贪婪算法
复习一下贪婪算法。个人的记忆和理解是:每一步都选择局部最优解。贪婪算法只是一种求得“近似”最优解的算法,并不能保证最终结果是最优解。这里模仿《算法图解》中的广播覆盖问题模仿提出一个问题。(上述链接提取码为q0m8)题:现有9个集合,每个集合中各有几个10以内的自然数,现要求尽量用到少的集合凑齐1-10的所有数。假如有这么几个集合:a {1, 10, 4, 7}b {10, 3, 4, ...
2019-09-06 15:57:31
215
原创 关于RecyclerView的notifyDataSetChanged
在很久以前,总觉得ListView的notifyDataSetChanged之类的方法很神奇,数据更新后,调用一下,视图就变了…不过自从知道观察者模式以后就没感觉么神奇了,反而对View的绘制测量一系列精细的计算叹为观止—虽然从某种程度上来说,Android的源代码其实挺臃肿的。后面推出了RecyclerView,但其实更新机制并无不同。就如调用notifyDataSetChanged方法:...
2019-09-01 17:12:48
2931
原创 python遍历文件
常用的工具类,要烂熟于心。# -*- coding: UTF-8 -*-import osimport syspath = sys.argv[1]def file_name(file_dir): for root, dirs, files in os.walk(file_dir): # print(root) # 当前目录路径 # prin...
2019-08-31 10:54:35
136
原创 关于Netty的BlockingOperationException问题
记录遇到的一个死锁异常。出现的场景是在客户端断线重连时。重连时代码类似这样: private void reconnect() { if (bootstrap == null) throw new IllegalArgumentException("bootstrap cannot be null"); //如果已经连接,则直接【连接成功】 if (channel == nu...
2019-08-24 13:29:44
2285
原创 RecyclerView二级列表
最近正好有做到二级列表,就记载一下怎样使用RecyclerView做二级列表吧。效果大概就是这个样子,可以凑合用,主要是弄清楚大概原理,这样就知道步骤。代码...
2019-08-17 23:11:07
6490
1
原创 Netty的UDP广播发送与接收
想要的逻辑是这样的:A向局域网内发送广播消息messageA;B收到了messageA并直接使用既有的session或channel把需要回复的消息write回来就行了。自己尝试了一下,记载一下使用中较为便利的写法。客户端一般是这样写: EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); try { ...
2019-08-09 20:03:54
10843
8
原创 Java中的去重
最近都在匡扶汉室,无心写代码。说到去重,往往会想到filter、distinct之类的关键字。如果可以使用库的话,比如RxJava2中: Observable.just("aa", "bb", "ccc", "dd", "bb").distinct().subscribe(new Consumer<String>() { @Override public...
2019-08-01 14:28:09
2685
原创 Python转jar为base64
一个工具,作用是将java打出的jar包转成Android可用的jar包,再转为base64编码。前提:本地有python开发环境本地有dx.bat,并如py一样配置到环境变量中因为将普通jar转成Android可用的jar包是需要dx工具帮忙的。直接上代码:# -*- coding: utf-8 -*-import base64import osimport sysim...
2019-07-26 16:22:32
290
原创 算法--冒泡排序、选择排序、插入排序
最近没啥好写的,来复习下初级算法吧。首先重温一下一些算法中的概念:时间复杂度O(n^2),代表算法所需运行时间,也是算法需要运行的指令数量,是一个最低上界值,n代表数据规模空间复杂度O(1),代表算法所需内存空间,一般算法为1,递归为n稳定性,排序中的稳定性是指原序列中如有两个相同的值,经过排序后,其相对位置不变即为稳定,反之为不稳定这里说的选择是直接选择排序算法,插入也是直接插入算...
2019-07-20 15:38:25
197
netty-slim.jar
2019-11-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人