自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(61)
  • 资源 (3)
  • 收藏
  • 关注

原创 Android 加载本地 Web 项目

Android端如何访问本地静态web项目

2022-11-16 17:20:00 960

原创 Android Gradle 自动化拉取 submodule

git 子项目管理

2022-06-29 17:23:13 912

原创 Android protobuf TextFormat、JsonFormat 序列化、反序列化

Android protobuf textformat jsonformat

2022-06-24 20:00:18 906

原创 git 拉取 文件/文件夹

git initgit remote add origin xxxgit config core.sparsecheckout trueecho xxx/xxx >> .git/info/sparse-checkoutgit pull origin master

2022-05-09 15:42:05 927

原创 Android WebView 录音

权限列表 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses.

2022-03-08 10:40:38 4622 1

原创 AndroidStudio 多模块环境统一

根目录创建config.gradleconfig.gradle 内容根目录 build.gradle 添加引入module中build.gradle使用

2022-01-06 10:09:48 818

原创 高德逆地理编码 POI 交叉路口获取

高德通过坐标查询附近

2021-12-20 14:15:44 628

原创 Properties 有序

public class LinkedProperties extends Properties { private static final long serialVersionUID = 1L; private Map<Object, Object> linkMap = new LinkedHashMap<Object,Object>(); @Override public synchronized Enumeration keys() {.

2021-12-14 15:06:45 217

原创 Android ViewBind

kotlin自带的控件注入, 告别butterknife, 摆脱findviewbyid,root build.gradle dependencies { ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" ... }项目build.gradleandroid { ... buildFeatures { viewBindi

2021-12-03 19:20:45 433 1

原创 高德导航过程中实时获取道路信息

通过当行的未知信息, 在规划路线上获取道路信息, 以及道路拥堵状态 @Override public void onLocationChange(AMapNaviLocation aMapNaviLocation) { int curStepIndex = aMapNaviLocation.getCurStepIndex(); List<AMapNaviStep> steps = mAMapNavi.getNaviPath().getSteps(

2021-11-29 09:38:25 1767 1

原创 Android 图形化性能分析工具 AGI

官网:https://developer.android.com/agi

2021-11-25 11:00:14 2176

原创 android gRPC 简单使用

gRPC 可以像调用方法一样进行网络请求github地址:https://github.com/grpc/grpc-java使用:1.proto文件放置到 src/main/proto2. module gradle配置plugins {... id 'com.google.protobuf'}android { ...}protobuf { protoc { artifact = 'com.google.protobuf:protoc:3.17.2' }

2021-11-25 09:57:12 3310 1

原创 Android Okhttp websocket 简单使用

//okhttpimplementation(“com.squareup.okhttp3:okhttp:4.9.0”) private WebSocketListener socketListener = new WebSocketListener() { //回调监听 @Override public void onClosed(@NotNull WebSocket webSocket, int code, @NotNull String reason) {

2021-11-25 09:35:28 4221

原创 spatialite for android

android端 spatialite数据库框架官方网址:https://www.gaia-gis.it/fossil/libspatialite/wiki?name=spatialite-android-tutorial官网demo 中的so导入不兼容新Android版本, 报错 spatialite has text relocationshttps://github.com/MarkTsy/spatialite_for_android/tree/master解决了不兼容问题, 可作为modu

2021-11-23 20:07:44 938

原创 Java MQTT 使用

org.eclipse.paho » mqtt-clienthttps://mvnrepository.com/artifact/org.eclipse.paho/mqtt-client String topic = "test/mqtt"; String content = "Hello mqtt!"; int publish_qos = 2; int subscribe_qos = 0; String broker = "tcp://xxx.xxx.xxx:1883"

2021-11-16 17:47:16 942

原创 自定义view-绘制流程

前言在实际的开发过程中,总有系统自带的控件无法满足的情况,这个时候就需要我们自己定义view,我们可以更灵活的定义view的排版方式,绘制方式,回调等等…绘制流程我们的界面,都是通过viewgroup层层嵌套viewgroup或者view的方式来实现的,那这个view树的绘制流程是如何的呢?总共分三步:Measure(测量) -> Layout(布局) -> Draw(绘制)上面的三个方法递归调用所有的子view,确定好大小,位置之后,开始绘制Measure(测量)View的

2021-05-10 10:22:36 2249 1

原创 自定义View-坐标

介绍自定义view包含内容无非就是位置的确定, 大小的测量, 内容的绘制, 动画的控制以及触摸反馈。本篇说一说关于位置如何来确定。Android坐标系首先来说自定义view如何来确定位置。在一个二维平面确定一个点的位置, 大家应该都知道, 是通过坐标, x轴y轴, 通过坐标来确定。在android中也通过坐标轴来确定, 不同的地方是y轴方向向下, 屏幕的左上点或者父view的左上点为原点(0,0)那么如何来确定一个view的位置呢? view是一个矩形, 那么通过对角的两个点就可以确定view

2021-05-10 09:57:21 333 1

原创 网络通信

介绍两台及两台以上的计算机相互之间进行数据的收发。TCP/IP目前我们经常用到的通信协议就是TCP/IP了, 下面展示了收发两端的层级作用TCP首部IP首部HTTP请求结构TCP三次握手第一次握手 建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;第二次握手 服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgmen

2021-05-08 10:06:37 147 1

原创 网络层级划分

前言大多数网络都采用分层的体系结构,每一层都建立在它的下层之上,同时向它的上一层提供一定的服务,而把如何实现这一服务的细节对上一层加以屏蔽。一台设备上的第 n层与另一台设备上的第 n 层进行通信的规则就是第 n 层协议。OSI:Open System Interconnection的缩写,意为开放式系统互联。国际标准化组织(ISO)制定了OSI模型,该模型定义了不同计算机互联的标准,是设计和描述计算机网络通信的基本框架。OSI模型把网络通信的工作分为7层,分别是物理层、数据链路层、网络层、传输层、会

2021-04-26 16:32:53 2921

原创 原子性 可见性 有序性

简介并发安全的三个要素, 原子性/可见性/有序性。原子性即一个操作或者多个操作,要么全部执行,并且执行的过程不会被任何因素打断,要么就都不执行。现实问题银行转账:A给B转1000元, 那么存在两个操作:从A账户减去1000元,在B账户加上1000元。如果第一个操作完成之后终止了, 那么就会导致B账户金额没有增加。 所以要保证两个操作要么都执行, 要么都不执行。程序问题假设赋值过程不具备原子性,变量赋值包括两个过程:为低16位赋值,为高16位赋值i = 9;如果低16位赋完值,突然被中断,

2021-04-26 10:37:27 130

原创 生产者消费者

简介生产者消费者是线程并发的经典案例, 保证线程安全且更好的协作。 线程安全是避免多线程操作同一个数据造成的脏读, 更好的协作是多个线程的状态切换可控且有目的性。 类比现实中的问题有点像交通警指挥交通。单生产单消费生产者public class Product { private String lock; public Product(String lock) { super(); this.lock = lock; } public

2021-04-25 10:44:11 106

原创 Synchronized & Reentrantlock

Synchronized方法同步: synchronized修饰的方法在method_info结构有ACC_synchronized标记,线程执行到这个方法时会识别标记,获取对应的锁,实现方法同步。 public void synchronized method(){} //对象为this示例 public static void synchronized method(){} //对象为this的class示例代码块同步: 通过编译将monitorenter指令插入到同步代码块的开始处,将

2021-04-21 10:32:47 61

原创 Thread 状态&方法

线程状态源码中可以看到关于线程的状态有一下几种:public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED;}状态图示下图展示线程执行过程中状态的切换常见方法1.sleep:释放cpu, 不释放锁, Thread类的方法,必须带一个时间参数。2.yield:让出CPU调度,重新回到可执行状态, 参与锁的竞争,Thread类的方法。3.wait

2021-04-20 17:24:12 127

原创 死锁

简介两个及以上的线程, 因资源争夺无法继续执行。四个必要条件互斥: 在相同时间下, 资源只能被一个进程所持有。不剥夺: 资源只能被线程主动释放, 不可被抢夺。请求和保持: 线程请求已被其他线程持有的资源, 无法获取,进入等待模式,且自身持有资源不释放。循环等待: 存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个进程所请求。原因资源争夺不可剥夺的资源,不足以满足多线程需要, 使得线程间相互争夺而陷入僵局。推进顺序非法进程在运行过程中,释放和请求资源的顺

2021-04-19 14:47:01 90

原创 线程池ThreadPool

介绍线程池就是对于Thread的复用,避免创建大量的工作线程导致资源的开销及浪费,甚至引发oom发生。ThreadPoolExecutor先来看一下线程池的构造函数各个参数意义public ThreadPoolExecutor( int corePoolSize, //核心线程数 int maximumPoolSize, //最大线程数 (核心+非核心线程数) long keepAliveTime, //非核心线程数超时时间 TimeUnit unit, //超时时间单位

2021-04-12 22:50:41 94

原创 Android 系统架构&源码目录

Android 系统架构图Apps 应用层直接与用户进行交互,包含系统级应用以及第三方应用。Framework 框架层运行一些系统服务, 以及为应用层提供API,主要的组件:名称功能描述Resource Manager(资源管理器)提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等Telephony Manager(电话管理器)管理所有的移动设备功能Window Manager(窗口管理器)管理所有开启的窗口程序Conten

2021-04-12 14:57:07 150

原创 Aosp 源码环境搭建以及开发调试

构建搭建环境系统要求: linux(推荐) / mac安装软件包: https://source.android.com/setup/build/initializing?hl=zh-cn同步AOSP源码官方教程:https://source.android.com/source/downloading?hl=zh-cn国内镜像:https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/Aosp代码仓库在国外, 没梯子的话无法下载, 推荐国内清华大学镜像分支

2021-04-12 10:48:44 965

原创 进程&线程

进程: 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程。线程: 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。多任务就是操作系统可以同时运行多个应用程序。比如说你在用电脑听歌的同时聊天。 比较早的时候,cpu都是单核的, 同样可以执行多任务。单核CPU是如何执行多任务? 操作系统让各个任务轮流交替执行,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。真正

2021-04-10 21:15:03 137

原创 排序算法

排序法最差时间分析平均时间复杂度稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)~O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n2)O(n*log2n)不一顶O(n)插入排序O(n2)O(n2)稳定O(1)堆排序O(n*log2n)O(n*log2n)不稳定O(1)希尔排序OO不稳定O(1)冒泡排序...

2021-04-09 09:39:33 75

原创 时间复杂度

前言算法很重要,但是一般情况下做移动开发并不经常用到,所以很多同学早就将算法打了个大礼包送还给了老师了,况且很多同学并没有学习过算法。这个系列就让对算法头疼的同学能快速的掌握基本的算法。过年放假阶段玩了会游戏NBA2K17的生涯模式,没有比赛的日子也都是训练,而且这些训练都是自发的,没有人逼你,从早上练到晚上,属性也不涨,但是如果日积月累,不训练和训练的人的属性值就会产生较大差距。这个突然让我意识到了现实世界,要想成为一个球星(技术大牛)那就需要日积月累的刻意训练,索性放下游戏,接着写文章吧。1.算法

2021-04-08 15:44:04 156

原创 数据结构简述

介绍数据在存储设备中的组织形式。在开发过程中针对不同的业务逻辑以及数据特典选择更高效的数据结构。本文只是进行概念性简述, 未避免篇幅过长没有进行更深层的表述.常见数据结构数组(Array): 数组是一种聚合数据类型,它是将具有相同类型的若干变量有序地组织在一起的集合。链表(Linked List): 链表是一种数据元素按照链式存储结构进行存储的数据结构,这种存储结构具有在物理上存在非连续的特点。栈(Stack): 栈是一种特殊的线性表,它只能在一个表的一个固定端进行数据结点的插入和删除操作。队列

2021-04-08 15:23:07 264

原创 JVM垃圾回收GC

垃圾回收介绍java 的垃圾回收机制,程序员不需要关心内存的申请与释放。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。回收判断标准判断标准的最终目的就是判断对象是否还需要使用,如果不再需要使用了就会被回收。一般有两种方法来判断:可达性分析算法: 从 GC Roots 开始向下搜索,搜索所走过的路径称为引用链。当一个对象到 GC Roots 没有任何引

2021-04-07 14:50:54 123

原创 JVM对象创建

图示对象创建主要流程分配内存处理并发安全问题对象的访问定位Java程序需要通过 JVM 栈上的引用访问堆中的具体对象。对象的访问方式取决于 JVM 虚拟机的实现。目前主流的访问方式有 句柄 和 直接指针 两种方式。句柄访问Java堆中划分出一块内存来作为句柄池,引用中存储对象的句柄地址,而句柄中包含了对象实例数据与对象类型数据各自的具体地址信息,具体构造如下图所示:优势: 引用中存储的是稳定的句柄地址,在对象被移动(垃圾收集时移动对象是非常普遍的行为)时只会改变句柄中的实例数据指针,

2021-04-07 10:53:42 84

原创 JVM类加载

类加载机制虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。JVM加载Class文件的原理机制Java中的所有类,都需要由类加载器装载到JVM中才能运行。类加载器本身也是一个类,而它的工作就是把class文件从硬盘读取到内存中。在写程序的时候,我们几乎不需要关心类的加载,因为这些都是隐式装载的,除非我们有特殊的用法,像是反射,就需要显式的加载所需要的类。两种类装载方式:隐式装载, 程序在运行过程中当碰到通过new 等方式

2021-04-06 16:28:19 79

原创 JVM内存管理

JVM 在执行 Java 程序的过程中会将其管理的内存划分为若干个不同的数据区域如下图所示,这些区域各自有不同的不同的用途、创建和销毁时间,有的区域随着虚拟机进程启动而存在,而有的则依赖用户线程的启动和结束而建立和销毁;有些区域是属于线程私有,而另外一些区域则是是线程共享。本篇将将根据各内存区域是属于线程私有还是线程共享将其分为两大类分别进行说明。线程私有的内存区域程序计数器(Program Counter Register)程序计数器是一块较小的内存空间(可能位于cpu的寄存器,有待确认),可以看

2021-04-06 15:59:39 199

原创 JVM组成

组成ClassLoader(类加载器)Runtime Data Area(运行时数据区,内存分区)Execution Engine(执行引擎)Native Interface(本地库接口)结构图执行过程首先需要准备好编译好的 Java 字节码文件(即class文件),计算机要运行程序需要先通过一定方式(类加载器)将 class 文件加载到内存中(运行时数据区),但是字节码文件是JVM定义的一套指令集规范,并不能直接交给底层操作系统去执行,因此需要特定的命令解释器(执行引擎)将字节码翻译

2021-04-06 15:48:25 75

原创 解释器模式

介绍解释器模式(Interpreter Pattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。类比现实中的翻译员应用场景自定义语法结构的时候需要翻译器...

2021-03-24 11:04:57 68

原创 模板方法模式

介绍模板方法模式是一种行为设计模式, 它在超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。类比装修, 可以选择一种风格的装修方式, 具体细节需要根据房屋个的格局进行调节类图应用场景当你只希望客户端扩展某个特定算法步骤, 而不是整个算法或其结构时, 可使用模板方法模式。模板方法将整个算法转换为一系列独立的步骤, 以便子类能对其进行扩展, 同时还可让超类中所定义的结构保持完整。当多个类的算法除一些细微不同之外几乎完全一样时, 你可使用该模式。 但其后果就

2021-03-24 10:26:12 67

原创 备忘录模式

介绍备忘录模式是一种行为设计模式, 允许在不暴露对象实现细节的情况下保存和恢复对象之前的状态。类比玩游戏的时候的存档, 什么都不用关心, 只要点击存档, 就会保存当前游戏进度, 下次可以读取寸档来恢复游戏进度。类图1.内部类方式2.接口实现方式3.封装更加严格的实现应用场景当你需要创建对象状态快照来恢复其之前的状态时, 可以使用备忘录模式。备忘录模式允许你复制对象中的全部状态 (包括私有成员变量), 并将其独立于对象进行保存。 尽管大部分人因为 “撤销” 这个用例才记得该模式

2021-03-24 10:03:53 109

原创 命令模式

介绍命令模式是一种行为设计模式, 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。类比去饭店点餐, 服务员记下你点的食物, 写在一张纸上。 订单贴在墙上。 过了一段时间, 厨师拿到了订单, 他根据订单来准备食物。 厨师将做好的食物和订单一起放在托盘上。 服务员看到托盘后对订单进行检查, 确保所有食物都是你要的, 然后将食物放到了你的桌上。那张纸就是一个命令, 它在厨师开始烹饪前一直位于队列中。 命

2021-03-23 17:23:34 278

spatialite-tools-5.0.1-win-x86.7z

spatialite for windows

2021-12-03

tftpd64_464.zip

tftpd64_464.zip

2021-04-15

BourDemo_1

毛玻璃效果demo 可直接运行

2016-09-18

空空如也

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

TA关注的人

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