自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

haizhuo的博客

脚踏实地,厚积薄发,没有天上掉馅饼。

  • 博客(59)
  • 资源 (1)
  • 收藏
  • 关注

原创 Android基础知识梳理

文章目录系统架构应用层应用框架层系统运行库层硬件抽象层(HAL)Linux内核层补充通信方式BinderIPC原理Binder原理Sockethandler主线程中子线程中Android类加载器Service类型前台服务后台服务绑定服务与服务有关的常用方法及作用(涉及Context类和Service类)生命周期手动调用Context#startService()开启服务手动调用Context#stopService()关闭服务手动调用Context#bindService()手动调Context#unbin

2020-07-09 16:30:01 9421 1

原创 MySQL使用开篇-安装和连接

前言操作系统window 10 64位。准备装2个版本。安装版这里我选择的Custom,也就是自定义,可以自行选择自己需要的模块。我选了不少模块,如ODBC、NET、Shell、Python一路下一步,设置root账号密码以及添加用户、指定服务名称、指定日志文件名称等,这些设置到时候会出现再配置文件中,到时候去看my.ini就知道了。不设置的话,会使用默认的,比如你的主机名叫HP-20181256,那么日志文件默认前缀就是主机名,如HP-20181256.err其他安装细节我省略了,没注意

2021-11-25 17:13:11 2290

原创 白嫖Github和CDN,播放一个远程视频

前言我用手机录制了一段视频,准备用exoplayer进行播放,当我准备将mp4文件放入工程时我发现文件太大了,这样app体积会很大,于是我找了个办法,把文件放到网上,但是我又爱折腾,研究了一下准备弄个m3u8格式的播放列表,顺便学习ffmpeg的命令。下载工具并调出命令行去官网FFmpeg下载工具,获取包和可执行文件。因为我使用的windows,直接去发布版本里找到这个ffmpeg-4.4-essentials_build.zip,下载解压之后把ffmpeg.exe复制到需要使用他的地方(我的路径 J

2021-09-29 14:44:57 2363

原创 RxJava2.0使用记录

前言契机是最近准备上手Flow了,想回顾一下Rxjava。一图流补充1:图示单词意思翻译Observable 可观测量;源 Observer 观察者Subject 主题Subscriber 订阅者对照图,我们知道可以被观察变化的是各种数据源Source和出版者Publisher,而观察变化的是各种Observer 观察者和Subscriber 订阅者事件订阅我们可以类比成一根水管的上下游,值得关心的地方有很多,比如上游发送到顺序下游接收顺序、水滴在流动中途的变化、水滴的大小等。配合操作

2021-09-06 18:04:38 296

转载 从AppCompat切换到MaterialComponents一些主题属性介绍

前言絮叨两句,感觉Component这个库有点傲娇,我碰到一个情景,使用Button,设置了background属性,当使用样式是AppCompat时,正常显示背景。但是当我换成MaterialComponents之后,我发现有一些Button背景正常,有一些背景不正常了。我又没用MaterialButton。。。普通写的selector都能给我失效哦。肯定是这个库搞得鬼,然后我看到了backgroundTint这个属性,总之很无语。然后找了篇文章,写了这篇笔记。主题属性总而言之在这些里面选就好了,类

2021-09-01 17:32:58 3294

原创 .idea文件夹一探究竟

前言有一个契机促使我去研究这个文件夹,我碰上一件奇怪的事。我有在ide里设置了gradle的usr home路径,这与系统默认的用户主目录不同。我使用的Android Studio版本为2020.3.1 北极狐版。我新建了一个项目,我发现使用的gradle-7.0.2-bin.zip,我使用gradlew -v查看Gradle的版本号确实是7.0.2,但是在.idea/gradle.xml内是这样的 <GradleProjectSettings> <optio

2021-08-12 15:45:47 2040 1

原创 gradle脚本改造from Groovy to Kotlin

前言前文buildSrc使用,依赖统一管理。gradle版本一升级我就懵逼,有些命令用不了,经常在gradle和kts之间来回切,记录一下。什么是Kotlin DSLAndroid Studio是使用Gradle来编译,而默认的构建语言是Groovy,但是Gradle实际上是支持Kotlin来编写Gradle构建脚本的,常见的构建脚本是.gradle结尾,而Koltin语法编写的脚本则是.gradle.kts。Gradle官网也是给出了Groovy迁移Kotlin的指导文章:Migrating bu

2021-07-30 15:31:08 891

原创 kotlin-android-extensions过时了,迁移到ViewBinding

前言回顾历史,kotlin-android-extensions插件让我们省去了很多findViewById的代码,直接使用控件id操作控件。不过在Android Studio 4.1及以上IDE新建项目的时候,默认不会引入他了,如果还在使用,会给一个警告:kotlin-android-extensions插件已被废弃,现在推荐使用ViewBinding来进行替代。更新gradle文件build.gradleplugins { //...// id 'kotlin-android-e

2021-07-02 16:27:59 1881

原创 聊一聊usb电缆的几种类型

前言无意中,看到我的手机充电线,一端是矩形口,一端是Type-C口,查了下usb相关知识,撸了一篇。关于USB的硬件接口形式USB-A、USB-B、USB-C,全称USB Type-A、USB Type-B、USB Type-C端口长得各种各样,贴几个4针、9针、11针、24针注意事项Type-C和USB Type-C不能等价,USB-C就是USB Type-C的简写,概念不能混淆。物理接头USB Type-A、Type-B接头分正反面,新型USB Type-C接头不分正反,这确实

2021-06-22 17:47:52 4452 1

原创 kotlin协程知识点梳理

kotlin coroutine 基础知识点

2021-05-13 14:29:44 917

原创 Toolbar和ActionBar的小结

前言哼,Toolbar,有够厉害的。算google致力于简化开发,提供的封装好的控件。像这种封装好的自定义控件有很多,比如BottomNavigation、比如TextInputLayout等。贴个material design风格控件网址:Components,有兴趣的可以看看。ActionBar描述:活动中的主要工具栏,可以显示活动标题,应用程序级别的导航功能和其他交互式项。诞生:是Google在Android 3.0(api 11)时代推出的。Android 5.0之前要使用Actio

2021-04-30 17:17:54 519

原创 Android多渠道打包

文章目录前言打包前需了解开始打包补充1-默认打包配置补充2-多渠道打包和第三方sdk的恩怨情仇补充3-未在 build.gradle 文件中定义 applicationId 属性的情况补充4-获取应用id的方法补充4- Google Play中的多APK分发补充5-配置构建变体补充6-多使用${applicationId}后话美团多渠道打包方案wallewalle集成阿里应用分发平台小米开放平台腾讯开放平台OPPO开放平台vivo开放平台华为开发者平台前言使用版本Android Studio4.1.2。

2021-04-28 17:12:14 241

原创 Kotlin学习笔记(不包含协程)

前言这篇文章完成的时间应该会很长,有句话说的好:种一棵树的最好时间第一是十年前,其实是现在。

2021-04-21 15:36:56 686

原创 MPAndroidChart使用记录

文章目录前言举例说明一些概念Chart设置补充1:ViewPortHandler类补充2:设置空数据文案补充3:设置触摸监听并打印当前坐标补充4:给chart设置一组数据折线图示例柱状图示例ChartData刷新列表的2种方式ComponentBaseDescriptionLimitLineLegendAxisBaseMarkerView前言说到图表,我第一时间就想到了大名鼎鼎的MPAndroidChart,这个库在在IOS端叫Charts。如果是网页端,ECharts库很好用。本文中使用库版本为M

2021-04-20 18:06:21 1306 1

原创 Android中Notification工具类

前言应用通知挺常见的,比如接入各个手机厂商的推送sdk。以前封装过一个工具类,准备分享一下。值得注意的点从 Android 5.0 开始,通知可以短暂地显示在浮动窗口中,称之为提醒式通知。从Android 8.0开始,需要做通道适配( 而Android8.0以下每个应用其实只有一个渠道)。创建通道的时机应尽可能早,在各渠道sdk初始化成功之前创建对应的通道。使用NotificationCompat.Builder作为通知构造器,他是兼容低版本的,但是如果低版本不支持某个api,则会出现空操作。(

2021-04-11 22:38:43 754

原创 数据解构与算法复习

前言复习资料来自于 拉钩教育-重学数据结构与算法时间复杂度和空间复杂度复杂度是衡量代码运行效率的重要的度量因素。一般而言一段代码会消耗计算时间和计算空间。不同的代码,耗时少,耗费内存少的,能给公司带来更多的收益,给用户更好的体验。综上所述,降低复杂度是每个程序员的必修课。复杂度与具体的常系数无关比如一串代码时间复杂度就是 O(n)+O(n),其实就是O(n)多项式级的复杂度相加的时候,选择高者作为结果O(1) 表示一个特殊复杂度,与输入数据量 n 无关空间是廉价的,而时间是

2021-03-19 15:01:45 310

原创 Git使用记录

前言其实我用svn用了好多年了,git一直断断续续的用,老忘记一些用法,干脆写下来,方便查阅。下载git地址:https://git-scm.com/downloads安装完git后,其实就能用了,不需要配环境变量。不过一些用到git的编程软件,像IDE这种是需要配置一下git.exe的路径。查看git路径在任意位置打开git-bash键入where git结果就出来了关于验证不管是使用GitHub还是GitLab,为了保证账户和数据的安全,都是需要验证的。主要有下面几种方式:双

2021-02-03 10:56:49 818

原创 Android Studio配置复用

前言经常要用别人的Android Studio,但是每个人的开发习惯不一样,有人之前一直用Eclipse,有人之前一直用Visual Studio,快捷键不一样,所以要设置Android Studio,最好每个人都备份一下配置文件,打个压缩包,出差在外也好,和同事协同也好,复制粘贴省了不少事。个人习惯记录Settings->KeyMap->Eclipse快捷键用习惯了,比如Ctrl+D删除一行、Alt加↑往上移动一行、Alt+←游标返回上一步操作的地方、Ctrl+G检索用到的地方

2021-01-25 17:15:01 389 1

原创 composingBuild依赖统一管理实践

前言接上文buildSrc使用,依赖统一管理,这次是用的自定义plugin实现的。和buildSrc差不多,又有细微差别新建versionPlugin文件把文件拷贝进去关于VersionConfigPluginVersionConfigPlugin就是我们自定义的plugin了,精简一点就直接实现就行了class VersionConfigPlugin : Plugin<Project> { override fun apply(project: Project) {

2021-01-22 17:59:29 1614 1

原创 buildSrc使用,依赖统一管理

前言之前我写过一篇全局统一配置文件config.gradle,把当时开发用到的一些类库还有版本号抽出来,放到工程目录下config.gradle文件下,moudle目录的gradle中设置引用就行了。记得当时还是用support包,现在开始用kotlin开发了,所以准备换成buildSrc。项目根目录下新建一个名为 buildSrc 的文件夹注意:名字必须是 buildSrc,因为运行 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录

2021-01-20 16:49:30 8664 5

原创 gradle常见的问题记录

前言比较神奇啊,经常会遇到gradle的问题,记录一下,方便查阅。场景张三从GitHub上拉了一个项目,瞅了一眼,C:\Users\Administrator.gradle\wrapper\dists目录发现没有gradle-5.6.4-all文件夹,但是有gradle-6.1.1-all文件,新项目要用5.6.4,张三无语了,他直接打开项目,发现报错了:Error:Failed to open zip file. Gradle’s dependency cache may be corrupt

2021-01-15 09:17:06 2036

原创 java中常见的进制转换

回顾10进制转2进制:整数部分除2取余法,小数部分乘2取整法和整数退位法。2进制转10进制:原则是逢2进1, 0b1111 转换成10进制:23+22+21+20=15;如果是8进制转10进制则是逢8进1, 0757 转换成10进制:下 7*8^2+…=495关于叫法,十进制中 十位、百位、千位……在二进制其实是 二位、四位、八位……其实挺好理解的。总结:除k取余,乘k取整,逢k进1。然后2的倍数的进制,比如8进制和16进制,换算的时候,可以3位一算或者4位一算。小数位使用乘k取整可能出现计算

2020-07-11 17:13:30 1297

原创 apk解包修改后重新打包

准备工作需要用到如下工具baksmali:把dex文件转换成smali文件的工具。smali:把smali文件转换成为dex文件的工具。smali下载链接1. 使用apktool解包可以见我之前一篇:apktool,dex2jar,jd-gui简单使用以HelloWorld.apk包为例,先解包修改源码或者替换资源需要了解一点smali文件知识。重新打包//打包成功会在[路径]所在文件夹下新建dist文件,生成apkapktool b [路径]以HelloWorld.ap

2020-07-09 15:03:22 4627

原创 apktool,dex2jar,jd-gui简单使用

Android反编译练习使用的三个软件都是免费的,下载地址Google一下也能轻易的搜到apktool下载地址dex2jar下载地址jd-gui下载地址dex2jar在sourceforge上面,建议代理开全局访问先apktool,运行apktool是需要Java环境的,不多说。我是windows环境,apktool_2.3.3.jar因为我网有点问题,自己弄了一个bat文件,以我使用的apktool_2.3.3.jar为例子@echo offif "%PATH_BASE%" == "

2020-07-08 17:29:58 1601

原创 WebView使用心得

文章目录基本设置Android调用JS代码通过WebView的loadUrl()例1:调用网页端写好的方法例2:调用在客户端写的方法(网页端没有)通过WebView的evaluateJavascript()2个方法对比JS通过WebView调用 Android 代码1. 通过对象映射例子2. 拦截url示例3. 拦截JS对话框上述3方法对比补充知识点WebViewClientWebChromeClient关于在js中打印日志,java中获取打印信息以及提示、打印回调跨域参考文章基本设置WebView可

2020-06-28 15:48:08 444

原创 Java基础知识梳理

文章目录java程序运行包括2个重要阶段:编译阶段和运行阶段虚拟机类加载机制类加载时机(整个生命周期)Java的类加载过程加载验证准备解析初始化类加载器双亲委派模型好处String、StringBuffer、StringBuilderequals()和“==”四种引用强引用软引用(SoftReference)弱引用(WeakReference)虚引用(PhantomReference)JVM占小狼的JVM源码分析文集垃圾回收机制GC新生代老年代概念判断对象是存活还是死了?四种垃圾收集算法标记-清除算法(Ma

2020-06-15 11:20:36 1112

原创 关于NDK如何生成so文件

准备工作由于ndk版本和IDE的版本可能存在不一致性,所以编译时会检查ndk的过时性,这个时候如果报警了,可以在gradle.properties文件下添加一行:## 随着gradle版本的升级,这条设置被废弃了,也就是说高版本gradle里就算设置了下面这句,也会被移除android.useDeprecatedNdk=true配置环境变量,方便通过命令提示行,在任意地方使用ndk命令linux不用配置环境,Windows需要在环境变量里找到Paht,添加ndk根目录地址路径。ndk下到哪

2020-06-10 16:34:05 893

原创 JNI使用记录-Android Studio创建Native C++项目

JNI概述JNI,全称为Java Native Interface,即Java本地接口,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。使用Android Studio新建一个项目,选择Native C++关于module的build.gradleandroid { //省略了其他代码 defaultConfig { externalNativeBuild { cmake {

2020-06-10 10:19:17 2782

原创 JNI装载库文件load和loadLibrary浅析

前言DK提供给用户了两个方法用于载入文件,一个是System.load(String filename)方法,另外一个是System.loadLibrary(String libname)方法。在任何本地方法被调用之前必须先用这个两个方法之一把相应的JNI库文件装载。System.load(String filename)System.load 参数必须为库文件的绝对路径,可以是任意路径。//WindowsSystem.load("C:\\Users\\TestJNI.dll"); //Linu

2020-06-09 17:35:58 2429

原创 使用Edittext和greenDao实现模糊检索更新列表

前言需要做一个根据Edittext文本变化模糊查询本地数据库,并更新列表的需求。要求一:触摸键盘和Edittext外部的时候隐藏键盘。要求二:默认Edittext图标居中,点击获取焦点之后图标居左,点击软键盘搜索按钮是去焦点,图标居中。思考可能用到的知识点Edittext添加文本变化监听addTextChangedListenerActivity的dispatchTouchEvent方法里记录当前坐标和获取焦点的View的关系,由此判断出是否要隐藏输入法。自定义Edittext并重写on

2020-05-22 11:45:30 273

原创 greendao使用记录

简介greenDAO是Android的对象/关系映射(ORM)工具。 它为关系数据库SQLite提供了一个面向对象的接口。像greenDAO一类的ORM工具为你做很多重复性的任务,提供简单的数据接口。添加依赖工程目录下build.gradlebuildscript { repositories { mavenCentral() } dependencies { classpath 'org.greenrobot:greendao-grad

2020-05-22 11:23:23 353 2

原创 Android应用中预览pdf

前言我前面写过一篇文章:系统下载管理器下载pdf。下载完弹出选择打开方式弹框。但是我需要的是在应用内预览,所以这种方式pass。思考IOS的同事使用WebView直接加载PDF的Url就实现了这个功能。Android的WebView和IOS的实现不一样,不能直接通过远程文件Url实现预览。但是可以另辟蹊径:使用如谷歌文档服务或者mozilla的文档服务(操作Url,拼接字符串)直接使用一些第三方的自定义控件,实现方式基本是将pdf下载到本地,解析之后显示出来。这里列举几个:AndroidP

2020-05-21 14:48:38 4188 5

原创 Android使用系统自带下载器

前言工作中遇到一个功能,下载pdf到本地缓存。下载到的路径为缓存路径,随时可能被清。但是调系统管理器下载完后会弹出选择打开方式弹框,比如QQ pdf查看器,他里面就有另存为和分享的按钮,所以问题不大。在配置文件添加权限<uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORA

2020-05-20 11:41:44 1925

原创 Android中字符串资源使用记录

使用占位符(Context类getString(@StringRes int resId, Object… formatArgs)的使用) %1$s表示替换的为String类型; %1$d表示替换的为int类型; 数字表示替换字符串中要替换的位置,若一个字符串要替换两个int类型,在替换位置分别写%1$d和%2$d; %s 、%d为缩写方式,只替换一个位置,可以这么写;例子//string.xml定义<string name="remove_family_sure">确定

2020-05-20 11:10:27 230

原创 Android图片选择器PhotoPicker

android图片选择器,适配Android11文件权限

2020-04-30 12:07:39 7025 4

原创 Android自定义View之年度账单曲线图

前言一说到折线图曲线图,我马上就想到了GitHub上的MPAndroidChart,扩展功能强大,本来想用,不过我转念一想,就一个年度账单,自己写不是几百行代码就搞定了?于是我开始了。先看一下设计图思考先考虑需要几种画笔Paint:曲线、字体、网格、背景色、详情背景色再考虑几个重要的变量:折线单位高度差、横向和纵向Item的高宽度、当年的最高用量、当年的最低用量需要确定的数据源:当前...

2020-03-31 10:07:06 525

原创 databinding实践

前言依稀还记得4年前刚入门的时候,每次写代码都是通过findViewById去拿到控件,然后使用控件。工作1年后,我发现了jakewharton大神的butterknife,然后开始使用资源绑定,那时候为了方便,我在Settings的Plugin里找到了Zelezny插件,控件的拿取都是一键生成的。美滋滋的使用了几年后,我发现了databinding这个东西。讲道理,我一直很反感各种命名各种找...

2020-03-04 11:15:49 243

原创 Android中so文件加载问题

前言-现在市面主流的手机架构x86/x86_64:这种架构手机包含由Intel提供的指令集转码工具,实现了对arm的兼容,使用这种架构的手机市场占有率很低。mips/mips64:极少手机使用这种架构,有兴趣可以自行百度。armeabi ARM v5:相当老旧的版本,缺少对浮点数计算的硬件支持,需要大量计算时有性能瓶颈。armeabi-v7a ARM v7:现在市面上主流版本,比如骁龙、...

2019-12-23 16:35:25 841

原创 UncaughtExceptionHandler使用

使用场景同步数据库时,有些特定的情况导致线程停止,但数据库数据还没有同步完,可以再重新打开线程,再同步完剩下的数据。移动端安卓客户端,不想接入如Bugly或者啄木鸟这种功能完善的第三方SDK,而只是想普通记录应用奔溃时候的日志。其他种种情况测试人员告诉我,有一些难以复现的bug,可不可以加个日志记录,那好吧,反正也是小项目,不接第三方,自己写好了。思路我准备在工程类Applic...

2019-12-11 17:40:19 321 1

原创 Java中正则表达式

含义正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。正则表达式一些字符意义字符说明\将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。...

2019-12-10 14:59:09 121

string和date之间转换,时间差计算

时间差计算 string和date之间转换 拿到年月日(yyyy年MM月dd日HH点mm分)

2018-04-16

空空如也

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

TA关注的人

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