自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android13添加自定义服务

Android13系统源码下添加系统服务的大致流程;

2023-07-25 15:53:12 649

原创 从【连接受限】看Android网络

从连接受限的现象逆推、追溯,了解Android网络体系中的一角。

2023-05-07 01:19:47 1777

原创 Flutter简易弹窗

Flutter利用Route实现简单的自定义弹窗效果。

2022-09-08 08:41:26 4613

原创 Flutter气泡框实现

Flutter使用CustomClipper实现气泡框;

2022-08-08 17:02:58 2678 1

原创 Dart中处理嵌套JSON

一个简单的处理嵌套JSON的dart工具类。

2022-07-20 15:23:54 3229 1

原创 Flutter Intl的使用

VSCode中Flutter Intl插件的使用

2022-07-15 17:02:36 6799

原创 Coap在Andorid中的简单应用

californium的简单应用,收发及组播。

2022-06-10 11:18:24 906 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 2255

原创 gradle自定义插件

某一天,我终于想起了使用gradle。

2021-06-22 10:21:05 613

原创 LiveData浅析

LiveData是Jetpack中的重要一环,在MVVM架构中承担着核心的位置。但我们暂时不去理会它在整个架构中的发挥,而是来关注其本质——LiveData本质是一个被观察者,即Observable。

2021-05-08 20:50:56 474 2

原创 throttle/debounce应用及原理

“防抖”一词经常让人联想到“摄像头防抖”之类的技术,不过摄像头所说的防抖是补偿式、阻尼式的防抖动,是实实在在的防“抖动”,软件上的防抖动其实更多是指“控制频率”。软件上的防抖和节流虽然往往是一体的,但还是先大致分清其区别:防抖频次过高的数据丢掉,仅保留频次低的数据;节流单位时间或空间内,仅保留一次数据;两者均可以理解为按制定的规则过滤重复项,以达到控制事件触发频率的目的。防抖的规则是过滤掉频次过高的数据项,只要频次过高的数据均视为无效数据;节流的规则是每个单位时间内都要保留一次有效数据;

2021-04-02 10:54:24 1152

原创 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 544

原创 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 1658

原创 kotlin作用域函数

官方释义作用域函数:Kotlin 标准库包含几个函数,它们的唯一目的是在对象的上下文中执行代码块。当对一个对象调用这样的函数并提供一个 lambda 表达式时,它会形成一个临时作用域。在此作用域中,可以访问该对象而无需其名称。这些函数称为作用域函数。共有以下五种:let、run、with、apply 以及 also。当前使用的kotlin版本为1.3.72;用官方的区别方式,主要从上下文对象引用方式和返回值加以区分:函数引用方式返回值runthis函数执行结果wi

2020-07-27 17:42:21 866

原创 正则替换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 1308

原创 关于Kotlin泛型遇到的问题

Java里有?、extends、super;Kotlin里有*、out、in;虽然表示方法不同,但其实可以认为是分别对应且等价的;...

2020-05-09 15:37:17 1557

原创 写一个定时自检

有一个后台程序需要这么一个功能:需要知道自己什么时候进入稳定状态。我原来用一种沙雕方式实现的,即开一个线程让一个计数器定时自增,自增到某个数即表示已经进入稳定状态,如果中间有打破这种状态的操作,那么就让计数器重置为0: public static AtomicInteger STABLE_TIMER = new AtomicInteger(0); taskExecutors.exec...

2020-05-07 17:25:33 254

原创 关于线程池中终止任务

使用线程池本身删除或终止任务,有一个必须的前提:任务必须存在于队列之中。为什么这么说?是因为我们所谓的“删除任务”是指ThreadPoolExecutor的remove方法: public boolean remove(Runnable task) { boolean removed = workQueue.remove(task); tryTermi...

2020-04-27 17:22:42 7904

原创 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 4456 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 1043 1

原创 class文件格式的理解

以前了解JVM相关知识时,对类文件结构仅仅是一瞥而过,并未仔细去深究,实在不应该。于是最近找了个闲暇,来仔细理解一下。先不谈各种定义,就现象而言,class文件只是开发者编译java文件产生的产物,且这个产物是供JVM阅读的。class文件于Java程序员自然随手可拾,当使用文本编辑器打开的时候却是这样的:cafe babe 0000 0034 003d 0a00 1100 2909001...

2019-12-14 12:27:50 623 1

原创 使用Gson解析错误json数据

在拉取数据时,有时候会遇到一些错误数据导致整张表都无法正常存储的情况,比如这种错误:com.google.gson.JsonSyntaxException: java.lang.NumberFormatException: Invalid long: "null"原json数据是这样的: { "id": "120207568323752...

2019-12-05 16:37:50 2840

原创 关于Netty精简

netty使用的jar包对于部分平台来说太大了,所以拿到源码后自行精简了一下。适用于安卓端。保留目录为:最终生成jar包:可自行测试,基础的TCP/UDP等通讯功能保留,去除了大量PooledBuffer及工具类。链接地址:netty-slim.jar...

2019-11-28 09:25:58 377

原创 Netty在无Internet网络状况下的连接建立超时

首先记录下结果,都是寻找DNS的锅。测试代码: public void testFlow(){ EventLoopGroup group = new NioEventLoopGroup();// try { Bootstrap bootstrap = new Bootstrap() .group(group) ....

2019-11-12 17:40:16 368

原创 利用IDE打jar包

一切操作基于IntelliJ IDEA。打jar包可以直接使用IDE来完成。第一步:第二步:第三步:最后就是生成了:生成的路径一般在项目根目录(非module)下的build\classes\artifacts下。用这种方式打jar包,是默认直接将依赖的第三库也打入jar包中的,包括使用远程仓库依赖的方式。并且有可视化界面可供操作:...

2019-11-02 18:13:25 936

原创 关于TEA加密算法在Java中遇到的问题

TEA加密解密在JAVA中的应用

2019-10-23 10:20:34 658 1

原创 在Java中运行JS

不借助平台内置引擎(比如Android的WebView)运行JS

2019-10-14 17:14:06 1497

原创 关于定时上报数据的无头无尾问题

/** * 问题:为一组定时上报的消息加上开始与结束标志,即当一个消息不再定时上报时,作为其结束标志 */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 251

原创 关于gradle多渠道打包的命名

使用gradle多渠道打包也不是什么新鲜事了,配置productFlavors就完事了,再写点buildConfigField什么的,似乎也就可以用了。用确实是可以用,但遇上某天想改打包出来的名字就很尴尬了,不知道怎么改。使用本来在build.gradle有这样的配置:android { productFlavors { jinxin_bcca { ...

2019-09-23 18:19:52 705

原创 IDEA无法选择新安装字体

原来使用IDEA的时候遇到过一个问题:在win10系统中,新安装在系统中的字体,在IDEA中根本显示不出来,怎么调设置都调不出来。先说结果,如果遇到这种问题,能够确定IDEA中的设置没什么毛病的,请直接怀疑是系统问题:需要【为所有用户安装】。就像这样:如果只是单纯的点击安装,然后按照一般流程安装的话,是不能显示在IDEA字体选择框中显示出来的,哪怕是按照标准流程【安装】–【重启IDE】也不...

2019-09-22 18:21:29 4115

原创 ByteBuffer注意事项

因为使用通信框架不同的缘故,bytebuffer这种东西在每个框架中都有可能是不同的,比如在Mina中叫IoBuffer,在Netty中叫ByteBuf,虽然叫法不同,但其实用法相似。有时候为了方便,就直接使用java内置的ByteBuffer了。所以了解ByteBuffer的使用,触类旁通也会变得很容易了。在一些容易混淆的问题产生之前,先复习一下常用场景下的基本使用。创建: public...

2019-09-15 16:44:10 561

原创 贪婪算法

复习一下贪婪算法。个人的记忆和理解是:每一步都选择局部最优解。贪婪算法只是一种求得“近似”最优解的算法,并不能保证最终结果是最优解。这里模仿《算法图解》中的广播覆盖问题模仿提出一个问题。(上述链接提取码为q0m8)题:现有9个集合,每个集合中各有几个10以内的自然数,现要求尽量用到少的集合凑齐1-10的所有数。假如有这么几个集合:a {1, 10, 4, 7}b {10, 3, 4, ...

2019-09-06 15:57:31 169

原创 关于RecyclerView的notifyDataSetChanged

在很久以前,总觉得ListView的notifyDataSetChanged之类的方法很神奇,数据更新后,调用一下,视图就变了…不过自从知道观察者模式以后就没感觉么神奇了,反而对View的绘制测量一系列精细的计算叹为观止—虽然从某种程度上来说,Android的源代码其实挺臃肿的。后面推出了RecyclerView,但其实更新机制并无不同。就如调用notifyDataSetChanged方法:...

2019-09-01 17:12:48 2466

原创 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 113

原创 关于Netty的BlockingOperationException问题

记录遇到的一个死锁异常。出现的场景是在客户端断线重连时。重连时代码类似这样: private void reconnect() { if (bootstrap == null) throw new IllegalArgumentException("bootstrap cannot be null"); //如果已经连接,则直接【连接成功】 if (channel == nu...

2019-08-24 13:29:44 1912

原创 RecyclerView二级列表

最近正好有做到二级列表,就记载一下怎样使用RecyclerView做二级列表吧。效果大概就是这个样子,可以凑合用,主要是弄清楚大概原理,这样就知道步骤。代码...

2019-08-17 23:11:07 6260 1

原创 Netty的UDP广播发送与接收

想要的逻辑是这样的:A向局域网内发送广播消息messageA;B收到了messageA并直接使用既有的session或channel把需要回复的消息write回来就行了。自己尝试了一下,记载一下使用中较为便利的写法。客户端一般是这样写: EventLoopGroup eventLoopGroup = new NioEventLoopGroup(); try { ...

2019-08-09 20:03:54 10121 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 2509

原创 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 245

原创 算法--冒泡排序、选择排序、插入排序

最近没啥好写的,来复习下初级算法吧。首先重温一下一些算法中的概念:时间复杂度O(n^2),代表算法所需运行时间,也是算法需要运行的指令数量,是一个最低上界值,n代表数据规模空间复杂度O(1),代表算法所需内存空间,一般算法为1,递归为n稳定性,排序中的稳定性是指原序列中如有两个相同的值,经过排序后,其相对位置不变即为稳定,反之为不稳定这里说的选择是直接选择排序算法,插入也是直接插入算...

2019-07-20 15:38:25 161

netty-slim.jar

自用netty的精简版,大小为1.3M左右。适用于Android端。 仅保留bootstrap,buffer,channel,handler,resolver,util目录。 以可正常建立TCP/UDP连接为基础,删除部分无关代码。

2019-11-28

空空如也

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

TA关注的人

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