自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(32)
  • 收藏
  • 关注

原创 git log实用指令

在提交了若干更新,又或者克隆了某个项目之后,你也许想回顾下提交历史。完成这个任务最简单而又有效的工具是。有许多选项可以帮助你搜寻你所要找的提交, 下面我们会介绍几个最常用的选项。你也可以限制显示的日志条目数量,例如使用。,它会显示每次提交所引入的差异(按。其中一个比较有用的选项是。

2023-12-19 14:45:23 544

原创 win10 物理按键映射、快捷键修改

win电脑ctrl太远,手势操作跨度大?习惯了mac的ctrl+tab切换窗口,难以适应alt+tab切换窗口等等?借助powertoys工具,可以映射物理按键,映射快捷键,done!

2022-05-24 15:18:56 2029 2

原创 Gradle 和插件这两者的最新版本

插件版本 所需的 Gradle 版本 1.0.0 - 1.1.3 2.2.1 - 2.3 1.2.0 - 1.3.1 2.2.1 - 2.9 1.5.0 2.2.1 - 2.13 2.0.0 - 2.1.2 2.10 - 2.13 2.1.3 - 2.2.3 2.14.1 - 3.5 2.3.0+ 3.3+ 3.0.0+ 4.1+ 3.1.0+ 4.4+ 3.2.0 - 3.2.1 4.6+ 3.3.0 -

2022-05-20 16:10:31 465 1

原创 Android glide之图片新增透明度变换

关于变换在Glide中,Transformations 可以获取资源并修改它,然后返回被修改后的资源。通常变换操作是用来完成剪裁或对位图应用过滤器,但它也可以用于转换GIF动画,甚至自定义的资源类型。内置类型Glide 提供了很多内置的变换,包括:CenterCropFitCenterCircleCrop应用通过 RequestOptions 类可以应用变换:默认变换Glide.with(fragment).load(url).fitCenter().into(imageView)

2022-04-29 16:30:01 2137

原创 基于LiveData的Service刷新UI

前言使用单例拓展LiveData对象,可以在您的app全局使用。LiveData一旦与service构建联系,通过observer观察者,即可更新数据源。下面举例说明构建SyncLiveData继承LiveData构建SyncServiceSyncFragmentFragment通过SyncLiveData观察LiveData数据发生变化后,可以做相关UI更新。LiveData通过Service发生数据更新。一、构建SyncLiveData类public class SyncLive

2022-04-21 15:18:44 4086

原创 Android RecyclerView With DiffUtil

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加例如:第一章 Python 机器学习入门之pandas的使用提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录系列文章目录前言一、DiffUtil是什么?1.了解 DiffUtil 算法二、使用步骤1.将 DiffUtil 添加到 ListAdapter2.更新数据前言Android RecyclerViews几乎是所有Android应用程序的一部分。用户滚动列表和更新列表内容时,Recycl

2022-04-14 15:49:51 3464

原创 Android db workmanager调试器

1、AS打开 Database Inspector如需在 Database Inspector 中打开数据库,请执行以下操作: 在模拟器或搭载 API 级别 26 或更高版本的已连接设备上运行您的应用。 从菜单栏中依次选择View > Tool Windows > App Inspection。 选择Database Inspector标签页。 从下拉菜单中选择正在运行的应用进程。 当前正在运行的应用中的数据库显示在Databases窗...

2022-03-24 15:40:45 3303

原创 在 Kotlin 中使用 RxAndroid 进行反应式编程

响应式编程RxJava是一个响应式实现,将这个概念带到了 Android 平台。Android 应用程序是您开始探索反应式世界的理想场所。使用RxAndroid更容易,这是一个包装异步 UI 事件以更像 RxJava 的库。在这个 RxAndroid 响应式编程教程中,您将学习如何执行以下操作:掌握反应式编程的概念。 定义一个Observable。 将按钮点击和文本字段上下文更改等异步事件转换为可观察的构造。 转换和过滤可观察项目。 在代码执行中利用 Rx 线程。 将几个 observ

2022-03-18 22:10:22 3934

原创 Android函数插桩

一、什么是插桩插桩:目标程序代码中某些位置插入或修改一些代码,从而在目标程序运行过程中获取某些程序状态并加以分析。简单来说就是在代码中插入代码。 函数插桩:便是在函数中插入或修改代码,在Android编译过程中,往字节码里插入自定义的字节码,所以也可以称为字节码插桩。二、如何进行操作完成插桩需要考虑以下两步:1、寻找插入时机 了解Android打包流程2、插入字节码 2.1、插桩入口 Transform API:Android Gradle提供,可操作获取字节码2...

2022-03-08 15:42:58 4197

原创 Android AsyncTask已被弃用

如果你对android开发感兴趣,那么我很确定你对android AsyncTask很了解。AsyncTask类帮助我们在后台线程中执行一些代码。在AsyncTask的帮助下,我们可以在后台线程上执行某些操作,并在UI线程中返回结果。但Android AsyncTask在API级别30中已被弃用。那么,现在的替代方案是什么?为什么Android AsyncTask不受欢迎?以下是官方反对它的原因。AsyncTask旨在实现UI线程的正确和简单使用。然而,最常见的用例是集成到UI中,这会导致

2022-03-08 10:13:52 4873

原创 Android背光系统实现

(一)Lights应用层SystemUI——系统应用,其主要功能:状态栏信息显示、通知面板、截图/壁纸/屏保服务等;代码:packages/apps/Settings/src/com/android/settings/BrightnessPreference.javaframeworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.javaframeworks/base/p...

2022-03-07 15:58:04 2339

原创 SSL认证过程介绍

1、SSL概述安全套接层(Secure Socket Layer,SSL )是一种在两台机器之间提供安全通道的协议。它具有保护传输数据以及识别通信机器的功能。安全通道是透明的,意思就是说它对传输的数据不加变更。客户与服务器之间的数据是经过加密的,一端写入的数据完全是另一端读取的内容。透明性使得几乎所有基于TCP 的协议稍加改动就可以在SSL 上运行,非常方便。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准,目前已有3.0版本。SSL采用公开密钥技术。其目标是保证两个应用间通

2022-03-04 17:59:41 8279

原创 Retrofit原理分析

1.OkHttp源码首先来一张okhttp源码的完整流程图1.1.RealCall.getResponseWithInterceptorChain方法解析首先看一个典型的同步请求过程public String get(String url) throws IOException { //新建OKHttpClient客户端 OkHttpClient client = new OkHttpClient(); //新建一个Request对象 Re.

2022-03-04 10:14:18 163

原创 Mac之UltraEdit

1、下载UltraEdit 18.00.0.22版本并安装2、运行一次UltraEdit,关闭3、控制台运行://修改skProtectionPlus::IsActivated函数printf '\x31\xC0\xFF\xC0\xC3\x90' | dd seek=$((0x76DC40)) conv=notrunc bs=1 of=/Applications/UltraEdit.app/Contents/MacOS/UltraEdit4、done...

2022-02-23 13:48:50 1275

原创 ViewPager嵌套WebView滑动冲突问题解决

在SwipeRefreshLayout、ViewPager,容器控件中内嵌了webview,webview的头部banner横向滑动跟viewpager冲突,可以采用如下自定义的webview来完美解决。public class CloudsBannerWebView extends WebView { public CloudsBannerWebView(Context context) { super(context); } public CloudsBanne...

2022-02-21 17:54:47 559

原创 mac android studio怎么快捷切换工程?

command+1:下一个工程command+2:上一个工程

2022-02-09 17:17:10 1293

原创 Android之缩略图缓存策略比对

BlobCache算法,这个算法的核心就是将所有的缓存数据都保存在同一个data文件中,记录缓存数据的索引保存在index文件中,由于index文件内存占用较小,读写时会把整个index文件映射至内存,然后使用RandomAccessFile随机读取接口,像操作指针一样控制index的偏移量读写data文件对应位置的数据。由于缓存文件存储在同一个文件下,缓存数据只能增加不能删除,BlobCache巧妙通过两个data文件(active和inactive)的翻转来实现缓存数据的删除更新。...

2022-01-31 10:00:43 513

原创 ContentProvider call实现跨进程通信

1、ContentProvider query作为 Android 四大基础组件之一的 ContentProvider 本来它的作用只是提供内容性质的跨进程访问。APP-A通过APP-B的ContentProvider相关实现,可以获取B的向外暴露的SQL或者SP数据,但是A如何通知B去更新ContentProvider的相关内容?传统方式有1:广播;2:AIDL,弊端是使用流程相对繁琐2、ContentProvider call在 API 11 (Android 3.0) 中...

2022-01-26 16:55:50 5018

原创 多进程初始化WorkManager

1、背景WorkManager用于处理Android中复杂的异步工作。WorkManager插件足以替换JobScheduler、Firebase JobDispatcher或Alarm Manager来完成这项工作。假设一个应用有多进程,在初始化WorkManager,除了主进程,还包含子进程,我们命名为remote。当我创建PeriodicWorkRequest在Application.onCreate,这是最简单的启动方式。这时候会受到异常:Process: com.examp...

2022-01-19 09:58:30 948

原创 Android之内存优化

内存管理 内存泄漏 内存使用查看方法 关于内存测试项 自动化工具1、 Android中的进程Native进程用C/C++编写的,不包含dalvik实例的进程,/system/bin/目录下面的程序文件运行后都是以native进程形式存在的。/system/bin/surfaceflinger、/system/bin/rild、procrank等就是native进程。 内存函数包括 MALLOC/FREE,NEW/DELETE等。动态内存需要人工管理。Dalvik进程Andro..

2022-01-16 08:56:55 2662

原创 Git 精美客户端-fork

Fork是一个友好的全功能的 Git 客户端,还非常多实用的功能,整体易用性已经达到很高的程度1、提交列表界面。2、使用合并冲突帮助器轻松解决合并冲突。3、允许您查看常见图像格式的差异4、通过“历史记录”视图,您可以找到更改了特定文件或目录的所有提交...

2022-01-14 09:55:24 2635

原创 Android多媒体框架设计图

2021-12-30 17:06:18 1140

原创 画流程图、类图开源神器:draw.io

对于画流程图的工具,之前大家用得比较多的可能是:visio和process on了。visio是微软的一款画图软件,需要在电脑上安装,正版软件是付费的。process on是一款免费在线画图工具,功能非常强大。但有个缺点是只能免费保存最近9张图,想保留更多的图,需要付费升级。draw.io,它已经成为了我画图首选工具。https://www.diagrams.net/基本能覆盖你的所需,done!...

2021-12-24 10:00:05 2193 1

原创 RoomDatabase重启断电数据丢失

Room 在SQLite上提供了一个抽象层,以便在充分利用SQLite的强大功能的同时,能够流畅地访问数据库。Android终端立即断电重启时,SQ写入磁盘会有延时,导致数据丢失。Linux/Unix系统中,在文件或数据处理过程中一般先放到内存缓冲区中,等到适当的时候再写入磁盘,以提高系统的运行效率。 在插入/更新数据库后,获取数据库地址File句柄,刷新一下。public void DBSync() throws IOExce...

2021-12-20 15:23:22 2979 2

原创 Flutter webview下拉刷新

构建一个webview的程序,却无法下拉刷新@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Stack( children: <Widget>[ Container( child: Center( child: Text...

2021-12-17 17:28:58 2126

原创 flutter_inappwebview

webview_flutter 是官方维护的 WebView 插件,特性是基于原生和 Flutter SDK 封装,继承 StatefulWidget,因此支持内嵌于 Flutter Widget 树中,这是比较灵活的。但不支持https自制证书强制信任。flutter_webview_plugin 则是基于原生 WebView 封装的 Flutter 插件,将原生的一些基本使用 API 封装好提供给 Flutter 调用,因此并不能内嵌于 Flutter Widget ...

2021-12-17 15:24:15 7716

原创 BouncyCastle之sm2公私匙

提供公私密匙对,及签名操作,工具类public class SignUtils { private static X9ECParameters x9ECParameters = CustomNamedCurves.getByName("sm2p256v1"); private static ECParameterSpec ecParameterSpec = new ECParameterSpec(x9ECParameters.getCurve(), x9ECParameters.getG(.

2021-12-16 11:51:54 2857

原创 海康威视硬件对接介绍

1、海康威视介绍海康威视从上市之初从事安防视频监控产品的研发、生产和销售,到现在是以视频为核心的物联网解决方案和数据运营服务提供商,面向全球提供安防、可视化管理与大数据服务。海康威视拥有视音频编解码、视频图像处理、视音频数据存储等核心技术,及云计算、大数据、深度学习等前瞻技术,针对公安、交通、司法、文教卫、金融、能源和智能楼宇等众多行业提供专业的细分产品、IVM智能可视化管理解决方案和大数据服务。在视频监控行业之外,海康威视基于视频技术,将业务延伸...

2021-12-16 11:40:40 4673

原创 视频通话分析

1:IP网络通讯协议在传统电话系统中,一次通话从建立系统连接到拆除连接都需要一定的信令来配合完成。同样,在IP电话中,如何寻找被叫方、如何建立应答、如何按照彼此的数据处理能力发送数据,也需要相应的信令系统,一般称为协议。目前在国际上,比较有影响的IP电话方面的协议包括ITU-T提出的H.323协议和IETF提出的SIP协议。而MGCP主要应用于运营商市场,在行业市场鲜有应用。1.1:协议概要分析1.1.1:H323协议H.323是ITU-T第16工作组的建议,由一组协议构成,其中有负责音频与

2021-12-14 11:52:42 5026

原创 正则表达式查找AA,ABC,ABCD等

public static int[] indexAAA(final CharSequence input) { Pattern p = Pattern.compile("(\\d)\\1{2}"); Matcher m = p.matcher(input); Log.i(TAG, m.toString()); if (m.find()) { return new int[]{m.start(), 3}; } else { retu.

2021-12-14 10:15:33 1412

原创 Android流量IP解剖方案

Android为VP*服务提供了一个用户级接口,开发只需关注与远程服务器的交互。其他操作如虚拟接口创建、地址和路由配置都是由操作系统完成的。1.从客户端建立VP*连接对于客户端,必须通过调用vp*服务准备,目的确保只有一个活动的VP*连接。如果已经有一个准备好的VP*连接(例如,停止然后手动启动同一个VP*连接),则返回空值。在这种情况下,我们应该手动调用onActivityResult函数。下面是用于在Button的onClick回调上启动VP*服务的代码public void onCl

2020-06-24 09:52:53 155

原创 OneNET之mqtt连接

OneNET定位为PaaS服务,即在物联网应用和真实设备之间搭建高效、稳定、安全的应用平台:面向设备,适配多种网络环境和常见传输协议,提供各类硬件终端的快速接入方案和设备管理服务;面向应用层,提供丰富的API和数据分发能力以满足各类行业应用系统的开发需求,使物联网企业可以更加专注于自身应用的开发,而不用将工作重心放在设备接入层的环境搭建上,从而缩短物联网系统的形成周期,降低企业研发、运营和运维成本。 OneNET提供安全稳定的设备接入服务,支持包括LWM2M、MQ...

2020-05-26 14:20:19 2941

空空如也

空空如也

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

TA关注的人

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