自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android组件化、模块化实现

前言移动端平台不断发展,不断迭代更新,APP软件越来越复杂和庞大,维护和更新亦是如此。为了解决这些问题,降低软件的复杂性和耦合度,同时提高开发效率,模块化在移动端就变得势在必行。模块化理解模块化是指解决一个复杂问题时自顶向下逐层把系统划分成若干模块的过程。每个模块完成一个特定的子功能,所有的模块按某种方法组装起来,成为一个整体,完成整个系统所要求的功能。通过以下类比可以更好地理解什么是模块化:我们可以把软件看做是一辆汽车,开发一款软件的过程就是生产一辆汽车的过程。一辆汽车由车架、发动机、变数箱、

2020-12-09 16:01:08 411

原创 Java虚拟机(8)Class文件结构

无关性Oracle公司以及其他虚拟机发行商发布过许多可以运行在各种不同硬件平台和操作系统上的Java虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现了程序的“一次编写,到处运行”的平台无关性。实现语言无关性的基础仍然是虚拟机和字节码存储格式,Java虚拟机不与任何程序语言(包括Java)绑定,它只与“Class文件”这种特定的二进制文件格式所关联。Class文件中包含了Java虚拟机指令集、符号表以及若干其他辅助信息。基于安全方面的考虑,《Java虚拟机规范》中要求在Class文件必须

2020-12-04 18:17:31 250

原创 Android数据库ObjectBox使用说明

前言集成GreenDao查询官网可以看到一则通告:对于新应用程序,我们建议使用ObjectBox,这是一个新的面向对象的数据库,它比SQLite快得多并且易于使用。对于基于greenDAO的现有应用程序,我们提供了DaoCompat,可轻松切换(另请参见公告)。于是,本篇便对比GreenDao写一个ObjectBox的简单使用说明,对比GreenDao集成起来更加容易,使用也比较简单。介绍ObjectBox数据库是用于对象的超快速轻量级数据库,由greenrobot团队开发,与GreenDao,Ev

2020-11-24 17:13:05 5220 1

原创 java虚拟机(7)垃圾收集器

经典垃圾收集器经典收集器之间的关系如图,七种作用于不同分代的收集器。两个收集器之间存在连线,就说明它们可以搭配使用。图中收集器所处的区域,则表示它是属于新生代收集器抑或是老年代收集器:新生代收集器:Serial、ParNew、Parallel Scavenge老年代收集器:CMS、Serial Old、Parallel Old整堆收集器: G1名词解释并行(Parallel)并行描述的是多条垃圾收集器线程之间的关系,说明同一时间有多条这样的线程在协同工作,通常默认此时用户线程是处于等待状

2020-11-16 10:29:03 154

原创 java虚拟机(6)垃圾回收算法实现细节

根节点枚举以可达性分析算法中从GC Roots集合找引用链这个操作作为介绍虚拟机高效实现的第一个例子。固定可作为GC Roots的节点主要在全局性的引用(例如常量或类静态属性)与执行上下文(例如栈帧中的本地变量表)中。目标明确,但Java应用越做越庞大,方法区的大小就常有数百上千兆,里面的类、常量等更是恒河沙数,检查以这里为起源的引用需耗费大量时间。主流Java虚拟机使用的都是准确式垃圾收集 ,直接得到哪些地方存放着对象引用的。HotSpot使用一组称为OopMap的数据结构来达到这个目的。类加

2020-11-06 15:33:00 194

原创 Java虚拟机(5)对象存活及引用&垃圾回收方法

对象的存活与死亡堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。如何确定对象是否存活?从如何判定对象消亡的角度出发,垃圾收集算法可分为“引用计数式垃圾收集”(Reference Counting GC)和“追踪式垃圾收集”(Tracing GC),也常被称作“直接垃圾收集”和“间接垃圾收集”。1、引用计数法**定义:**在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数

2020-11-04 16:03:48 180

原创 Java虚拟机(4)OutOfMemoryError异常

在《Java虚拟机规范》的规定里,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError(OOM)异常的可能。Java堆溢出Java堆内存的OutOfMemoryError异常是实际应用中最常见的内存溢出异常情况。产生原因Java堆用于储存对象实例,不断地创建对象,总容量触及最大堆的容量限制后就会产生内存溢出异常。处理方法首先通过内存映像分析工具(如Eclipse Memory Analyzer)对Dump出来的堆转储快照进行分析,确认是出现了内存泄漏(Me.

2020-10-30 09:23:38 106

原创 Android数据库GreenDao使用说明

介绍GreenDao是一个开源的 Android ORM嵌入式关系数据库,通过将 Java 对象映射到数据库表(称为 ORM,“对象/关系映射”) ,使用一个简单的面向对象的 API 来存储、更新、删除和查询 Java 对象。GreenDao特点最佳性能 (可能是 Android 中最快的 ORM) ,基准测试也是开源的;易于使用的功能强大的 api,涵盖关系和连接;最小的内存消耗;小型库大小(< 100KB) ,以保持较低的构建时间,并避免65k 方法限制;数据库加密:greenD

2020-10-30 09:21:54 252 1

原创 Java虚拟机(3)对象创建、内存区域及访问定位

1. 对象的创建当Java虚拟机遇到一条字节码new指令时,就会开始虚拟机中对象的创建:1.1 类加载检查检查new指令的参数是否能在常量池中定位到一个类的符号引用检查这个符号引用代表的类是否已被加载、解析和初始化过;如果没有,那必须先执行相应的类加载过程。1.2 为对象分配内存对象所需内存的大小在类加载完成后便可完全确定,等同于把一块确定大小的内存块从Java堆中划分出来。选择哪种分配方式由Java堆是否规整决定,Java堆是否规整又由所采用的垃圾收集器是否带有空间压缩整理(

2020-09-10 17:43:21 117

原创 Java虚拟机(1):认识Java技术体系及虚拟机

Java技术体系按功能划分Java程序设计语言各种硬件平台上的Java虚拟机实现Class文件格式Java类库API来自商业机构和开源社区的第三方Java类库JDK java Development Kit (Java开发最小运行单位Java程序设计语言、Java虚拟机、Java类库)JRE Java runtime environment (Java运行环境Java类库API中的Java SE API子集和Java虚拟机)按服务对象划分Java C

2020-09-10 14:22:49 246

原创 Java虚拟机(2):运行时内存结构

Java技术体系按功能划分Java程序设计语言各种硬件平台上的Java虚拟机实现Class文件格式Java类库API来自商业机构和开源社区的第三方Java类库JDK java Development Kit (Java开发最小运行单位Java程序设计语言、Java虚拟机、Java类库)JRE Java runtime environment (Java运行环境Java类库API中的Java SE API子集和Java虚拟机)按服务对象划分Java C

2020-09-09 16:37:56 156

原创 Android 串口通信(二)

前言上一篇中主要介绍了串口基础内容和基于谷歌官方android-serialport-api库 对Android设备进行的串口操作,这篇文章主要介绍基于Usb转串口驱动库usb-serial-for-android 的相关内容及操作,同时对Usb串口设备进行插拔监听等相关操作。Usb转串口开发USB转串口即实现USB接口到通用串口之间的转换,为没有串口的设备提供快速的通道,而且,使用USB转串口设备等于将传统的串口设备变成了即插即用的USB设备。作为应用最广泛的USB接口,支持热插拨,即插即用,传

2020-09-08 17:27:12 1382

原创 Android 串口通信(一)

前言做了一些Android驱动板的串口通信,对控制卡,继电器开关,麦克风,PWM风机等进行操作,进行一下记录分享。其中,包含了Android自身的串口操作及Usb转串口的操作。本篇主要介绍串口基础内容和基于谷歌官方android-serialport-api库 对Android设备进行的串口操作,下一篇中将给出基于Usb转串口驱动库usb-serial-for-android 的相关内容及操作。串口通信串行接口是一种可以将接收来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接收的串

2020-09-08 17:24:16 1395

原创 Android 数据保存到系统库及系统配置修改

前言生成的软件识别唯一码想保存到本地,卸载重新安装后根据唯一码进行设备识别。经过查询发现可以使用Settings系统库简单实现。使用方法使用方法类似SharePreference,以键值对key-value的形式进行数据存储,将数据内容保存到系统配置文件中,程序卸载安装不影响系统文件,仍然能获取到之前保存的数据内容。系统配置文件的路径为:/data/data/com.android.providers.settings/databases/1. 数据保存://设置系统配置文件中的配置数据,第

2020-08-12 14:42:14 3197

原创 Android 蓝牙可见性开启与关闭

定制的Android设备只有在蓝牙页面才能被扫描搜索到,要求软件开启启动后作为服务端被蓝牙连接,且一直处于被发现状态。最初尝试了下面的方法,但是有时间限制而且需要手动确认://启动修改蓝牙可见性的IntentIntent intent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);//设置蓝牙可见性的时间,方法本身规定最多可见300秒intent.putExtra(BluetoothAdapter.EXTRA_DISCOV.

2020-08-12 14:30:40 1944

原创 Android蓝牙开发(二)经典蓝牙消息传输实现

上篇文章中,我们主要介绍了蓝牙模块,传统/经典蓝牙模块BT和低功耗蓝牙BLE及其相关的API,不熟悉的可以查看Android蓝牙开发(一)蓝牙模块及核心API 进行了解。本篇主要记录用到的经典蓝牙开发流程及连接通讯。1. 开启蓝牙蓝牙连接前,给与相关系统权限:<!-- 使用蓝牙的权限 --><uses-permission android:name="android.permission.BLUETOOTH" /><!-- 扫描蓝牙设备或者操作蓝牙设置 -->

2020-08-11 16:43:54 1331 2

原创 Android蓝牙开发(一)蓝牙模块及核心API

本文主要介绍Android蓝牙开发中基础知识:蓝牙模块及核心API。关于蓝牙的连接及通讯功能实现,欢迎查阅下一篇文章:Android蓝牙开发(二)蓝牙消息传输实现。蓝牙模块从蓝牙4.0开始包含两个蓝牙芯片模块:传统/经典蓝牙模块(Classic Bluetooth,简称BT)和低功耗蓝牙(Bluetooth Low Energy,简称BLE)。经典蓝牙是在之前的蓝牙1.0,1.2,2.0+EDR,2.1+EDR,3.0+EDR等基础上发展和完善起来的, 而低功耗蓝牙是Nokia的Wibree标.

2020-07-28 16:10:51 1352

原创 Android串口MUDBUS指令及CRC16校验

前言最近开发中用RS485串口命令去控制继电器和风机调速,用到了MUDBUS指令。通过串口会发送一串’ 01 06 00 01 01 00 D9 9A '这样的命令到继电器,从而达到控制的目的。起初,对这命令感到疑惑,最后经过文档查看及分析,发现不同的位代表了不同含义:设备地址(01)、功能号(06)、数据地址(0001)、数据(0100)、CRC16校验(D99A)。其中CRC16校验是怎么得出的,由什么的得出的让我感到困惑,文档也没有说明,经过查阅发现CRC16校验是对前面的命令,也就是’ 01 0

2020-05-26 11:13:28 1631

原创 Android 投屏集成记录

前言项目中APP要和电视进行交互,进行视频投屏及镜像两种方式,一番查询、决策后,最后选择采用的乐播投屏去实现,实现过程还是挺简单的,最终的效果也比较理想。至于为什么选择乐播投屏,最初可能是官网上说乐播投屏让1000+音视频APP具备投屏能力,以下APP均可一键投屏,同时,已覆盖市面上95%的电视/投影/盒子品牌,完美兼容2亿大屏。投屏模式及原理首先先了解一下投屏的两种模式及应用:推送模式主要用于投屏视频和音乐,投屏之后手机可以关闭,聊微信,逛淘宝其它操作时,电视不会停止播放,玩手机看

2020-05-15 15:50:51 2947 4

原创 Android视频悬浮窗口实现

前言本文例子实现了点击显示悬浮窗口,同时窗口可播放视频,拖动位置,点击关闭及返回APP页面,通过例子来讲述悬浮窗口实现原理及细节处理,效果图如下所示:原理WindowManager对View视图进行添加、移除、更新处理;WindowManager.LayoutParams对窗口参数进行一系列设置。实现首先,需要添加相对应悬浮窗权限:<uses-permission a...

2020-04-14 17:19:40 1567 3

原创 Android Studio错误:Error:Unable to resolve dependency for ':app@debug/compileClasspath'记录

前言Module下build.gradle中依赖更新后,一直有些依赖更新不下来,网络访问也正常,各种方法试验。之前偶尔就会有依赖更新不下来,多次同步后一般也都能拉下来,这次更新后 AndroidUtilCode库 就始终更新不下来,接着就无奈去尝试各种方法。尝试方法首先试着去clean 并rebuild项目,然后又Invalidate and Restart项目,都无效果;然后查阅网上有人说...

2020-04-10 18:48:19 525

原创 MQTT协议实现Android中的消息收发

前言MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),基于发布/订阅范式的消息协议,是一种极其简单和轻量级的消息协议,专为受限设备和低带宽、高延迟或不可靠的网络设计。今天主要说明一下MQTT协议在Android中进行消息的收发应用,关于MQTT协议的基础内容请参考之前介绍的 MQTT协议 相关内容。效果使用前先查看一下简单的效果图,MQTT...

2020-04-08 16:36:26 298

原创 Android 文本TextView底部对齐实现

前言想要实现主体文字突出显示,前面是数值加粗,后面是单位符号,且底部对齐数值显示的效果;但是不同TextView字体大小排版后总是有些差别,无法底部对齐。百度一番后有重写TextView的,还有其它布局对齐等方法,效果并不好使。突然想起之前写的SpannableStringBuilder,其中AbsoluteSizeSpan可实现同一个TextView文字大小变化,而且底部是对齐的,于是就拿来使...

2020-03-31 14:31:41 2395

原创 Android通知栏前台服务

一、前台服务的简单介绍前台服务是那些被认为用户知道且在系统内存不足的时候不允许系统杀死的服务。前台服务必须给状态栏提供一个通知,它被放到正在运行(Ongoing)标题之下——这就意味着通知只有在这个服务被终止或从前台主动移除通知后才能被解除。最常见的表现形式就是音乐播放服务,应用程序后台运行时,用户可以通过通知栏,知道当前播放内容,并进行暂停、继续、切歌等相关操作。二、为什么使用前台服务...

2020-03-30 17:34:41 838

原创 SpannableStringBuilder实现TextView华丽变身

前言想要在TextView 的文本添加一些突出文字,然后点击可以进行跳转,首先想到的就是TextView拼接,但是考虑到换行后的显示又不是很合适,一番查询后发现了SpannableStringBuilder这个类,不仅可以实现想要的效果,还可以更加神奇,究竟怎么神奇呢,我们先看一下效果图:每一行都只是一个TextView,既可以高亮显示文本,而且可以插入图片,并对部分内容设置点击事件,这就是...

2020-01-13 19:52:00 276

原创 万物互联—MQTT协议

一、简介MQTT(Message Queuing Telemetry Transport,消息队列遥测传输),最早是1999年由IBM开发的基于发布/订阅范式的消息协议,是一种极其简单和轻量级的消息协议,专为受限设备和低带宽、高延迟或不可靠的网络设计。自1999年以来, 已在多个行业广泛实施,是一种物联网和移动互联网领域的行业标准协议,适合移动终端之间的数据传输,用于端与云之间的消息传递,实现...

2020-01-11 16:24:37 569

原创 Fiddler抓包详细教程

Fiddler是一款免费而且功能强大的数据包抓取软件,下面就为大家介绍一下抓包流程,只需按图片一步一步操作就可实现数据抓取。1.首先安装Fiddler抓包工具软件下载链接:https://www.telerik.com/download/fiddler/fiddler4安装完成,只需点击同意,下一步安装即可。2.Fiddler相关配置安装完毕后,按下图图进行配置勾选,然后重启Fiddl...

2020-01-11 15:16:05 5113 1

原创 Android 单双击实现记录

记录单击、双击实现过程,进行简单的封装,便于复用,包括常用的软件双击退出。双击实现:记录第一次点击时间,在设定时间内再次点击,则返回监听事件,否则不做处理;Application双击退出亦是同样的实现逻辑。/** * 双击实现 * * @author 几圈年轮 */public abstract class BaseDoubleClickListener implements V...

2020-01-11 15:09:03 132

原创 Android短视频滑动播放(二)

###Android短视频滑动播放(一)上一篇文章中讲到了短视频滑动的基本实现,文末也给出了相应的例子,可以运行查看,本节进一步完善滑动处理内容,主要给出了数据更新内容,下拉刷新最新内容,上拉预加载,可不断向下滑动;同时,介绍了视频的暂停、继续处理,循环播放或自动滑动到下一条以及多布局的处理。1. 数据刷新内容刷新布局采用了SwipeRefreshLayout,实现经典式的下拉刷新控制。...

2020-01-06 19:59:49 1348

原创 Android短视频滑动播放(一)

----------本文主要介绍采用RecyclerView配合PagerSnapHelper实现短视频滑动播放内容。主页布局文件定义RecyclerView,为RecyclerView建立对应适配器。 <androidx.recyclerview.widget.RecyclerView android:id="@ id/rv_little_video" ...

2020-01-06 19:56:03 1740

空空如也

空空如也

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

TA关注的人

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