android
文章平均质量分 68
Huang兄
以开源为目标,却做着闭源的工作。
博客迁移到 https://blog.huangyuanlove.com
展开
-
AndroidStuio插件开发-适用于jetbrains全家桶
文章目录创建项目创建类获取文件解析文件展示解析内容写入文件写了个类似Butter Knife的开发库,但是并没有与其配套的AndroidStudio插件,抽时间研究了以下IDEA的api文档,撸了一个对应的插件,源码在这里代码参考https://github.com/avast/android-butterknife-zelezny所用到的知识点:查找文件解析xml写文件IDEA插件开发文档:https://jetbrains.org/intellij/sdk/docs/intro/welc原创 2020-12-15 10:16:39 · 1194 阅读 · 0 评论 -
自定义Gradle-plugin
groovy 语法入门gradle 基础gradle 任务gradle 插件gradle-java 插件gradle-android 插件前面简单的写了点关于gradle的以及gradle插件的东西,现在我们来看一下如何自定义插件,本篇文章是基于AndroidStudio、Android工程进行讲述。存放插件源码我们可以在以下几个地方存放我们的插件源码Build Script每个module中都会有build.gradle文件,我们可以在该文件中编写一些所需要的插件功能,好处是可以被自原创 2020-11-29 18:13:40 · 1457 阅读 · 0 评论 -
Android打包流程
文章目录构建过程初见细节终章现在的Android开发大部分是在AndroidStudio中进行的,当我们想要得到APK文件的时候,点一下RUN,或者执行一下gradlew assembleDebug 就可以了,那么在这个过程中到底发生了什么,我们来详细看一下。构建的过程大致可以划分为两个过程:编译和打包编译:编译器(compileer)通过编译source code、AIDL files、source filse、dependednce files,最终生成Dex(s)文件和编译后的资源文件打包:打原创 2020-11-16 23:14:53 · 3296 阅读 · 1 评论 -
面试总结
2018-06-03 14:30:54文章目录操作系统相关:进程和线程的区别线程调度算法内存页面置换算法java相关:synchronized 和Lock的区别 以及实现原理Map、Set、List区别Java虚拟机捕获子线程异常线程池单例模式 线程安全Android相关:多进程写sp的问题sp底层实现Activity和Fragment生命周期,生命周期函数是谁调用的Activity启动模式,启动过程View点击事件分发流程View绘制过程Handler省电优化广播的底层实现(binder)计算机网络相关原创 2020-11-06 07:54:52 · 480 阅读 · 0 评论 -
通过简单的自定义view来看View的工作流程
2017-03-18 14:54:01文章目录一、自定义View的分类1.1 继承View重写onDraw方法1.2 继承ViewGroup派生特殊的Layout1.3 继承特定的View(如TextView)1.4 继承特定的ViewGroup二、值得注意的地方2.1 让View支持wrap_content2.2 如果有必要,让View支持padding2.3 尽量不要在View中使用Handler,没必要2.4 及时停止动画和线程2.5 View带有滑动嵌套情形时,需要处理好滑动冲突三、自定义View原创 2020-11-06 07:50:17 · 434 阅读 · 0 评论 -
适配全面屏手机
2018-11-12 20:05:56文章目录显示问题在AndroidManifest.xml声明max_aspect值更换资源文件关于折叠屏放个图感受一下,上面的图是折叠屏,并非是全面屏,全面屏是手机业界对于超高屏占比手机设计的一个宽泛的定义。全面屏手机屏幕的宽高比例比较特殊,不再是以前的16:9了。比如三星的Galaxy S8屏幕分辨率是:2960×1440,对应的屏幕比例为:18.5:9。VIVO X20手机屏幕分辨率是2160x1080,对应的屏幕比例:18:9。由于全面屏手机的高宽比比之前大,原创 2020-11-04 08:07:55 · 380 阅读 · 0 评论 -
适配Android高版本系统常见问题
2019-04-17 18:03:41文章目录文件操作(FileOperationActivity)拍照、选择图片(TakePhotoOrChoosePhotoActivity)存储访问框架(SAFActivity)通知管理(NotificationActivity)权限申请(MainActivity)快捷方式(ShortCutActivity)Android P,Q 版本适配常见问题项目地址 https://github.com/huangyuanlove/AdaptationAndroidP文原创 2020-11-04 08:00:36 · 1432 阅读 · 0 评论 -
自定义注解,打造自己的框架-最终篇
2019-12-12 21:42:27文章目录前提声明注解处理注解逻辑给使用者提供调用方法使用结语该系列介绍自定义注解,完成如下功能。 @BindView 代替 findViewById @ClickResponder 代替 setOnClickListener @LongClickResponder 代替 setOnLongClickListener @IntentValue 代替 getIntent().getXXX @UriValue 代替 getQueryParameter @B原创 2020-11-04 07:59:07 · 170 阅读 · 0 评论 -
自定义注解,打造自己的框架-下下下篇
2019-12-10 23:27:06文章目录前提声明注解处理注解逻辑给使用者提供调用方法使用该系列介绍自定义注解,完成如下功能。 @BindView 代替 findViewById @ClickResponder 代替 setOnClickListener @LongClickResponder 代替 setOnLongClickListener @IntentValue 代替 getIntent().getXXX @UriValue 代替 getQueryParameter @Bro原创 2020-11-04 07:57:59 · 274 阅读 · 0 评论 -
自定义注解,打造自己的框架-下下篇
2019-12-09 23:21:08文章目录前提声明注解处理注解逻辑给使用者提供调用方法使用该系列介绍自定义注解,完成如下功能。 @BindView 代替 findViewById @ClickResponder 代替 setOnClickListener @LongClickResponder 代替 setOnLongClickListener @IntentValue 代替 getIntent().getXXX @UriValue 代替 getQueryParameter @Bro原创 2020-11-04 07:57:19 · 224 阅读 · 0 评论 -
自定义注解,打造自己的框架-下篇
2019-12-04 22:53:52文章目录结构声明注解声明注解处理器处理注解逻辑给使用者提供调用方法使用该系列介绍自定义注解,完成如下功能。 @BindView 代替 findViewById @ClickResponder 代替 setOnClickListener @LongClickResponder 代替 setOnLongClickListener @IntentValue 代替 getIntent().getXXX @UriValue 代替 getQueryParamete原创 2020-11-04 07:56:41 · 316 阅读 · 0 评论 -
自定义注解,打造自己的框架 (中篇)
2019-12-01 17:42:27文章目录javapoet反射该系列介绍自定义注解,完成如下功能。 @BindView 代替 findViewById @ClickResponder 代替 setOnClickListener @LongClickResponder 代替 setOnLongClickListener @IntentValue 代替 getIntent().getXXX @UriValue 代替 getQueryParameter @BroadcastResponde原创 2020-11-04 07:56:00 · 219 阅读 · 0 评论 -
自定义注解,打造自己的框架(上篇)
2019-11-23 23:09:29文章目录常见的注解:太长不看系列总结注解的声明反射实现该系列介绍自定义注解,完成如下功能。 @BindView 代替 findViewById @ClickResponder 代替 setOnClickListener @LongClickResponder 代替 setOnLongClickListener @IntentValue 代替 getIntent().getXXX @UriValue 代替 getQueryParameter @Broa原创 2020-11-04 07:54:37 · 281 阅读 · 0 评论 -
自定义View--贝塞尔曲线、Shader
2019-01-20 21:56:52文章目录贝塞尔曲线的应用手势追踪,改变moveTo、LineTo生硬路径现象波浪效果望远镜效果(点击哪里则哪里出现图像)贝塞尔曲线可以将Path中的moveTo、LineTo等连接的生硬路径变得平滑,也能实现很多好看的效果。一阶贝塞曲线B(t)=P0(1−t)+tP1,t∈[0,1]B(t)=P_0(1-t)+tP_1,t\in[0,1]B(t)=P0(1−t)+tP1,t∈[0,1]二阶贝塞尔曲线B(t)=P0(1−t)2+2t(1−t)原创 2020-11-04 07:52:14 · 516 阅读 · 0 评论 -
简单的桌面小部件
2017-03-20 11:51:11文章目录定义小部件界面定义小部件配置信息定义小部件的实现类实现一个简单的桌面小部件,响应点击事件,更新等功能。定义小部件界面定义小部件配置信息定义小部件的实现类声明小部件在AndroidStudio中只需要在main\java下新建一个widget,就可以了,IDE会自动在res\layout添加布局文件,在res\xml下新建配置信息文件。然后就可以进行具体实现了。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tM原创 2020-11-03 22:02:50 · 843 阅读 · 0 评论 -
如何发布开源库到jcenter
2019-11-04 22:24:26文章目录准备上传到bintray发布到jcenter最近学习了一下Annotation和APT,简单的写了个库,想要发布到公共仓库供大家使用(虽然没人用,但就是想尝试一下),最简单的是通过https://jitpack.io/直接从github上抓取release代码打包,并且目前已经支持https://gitee.com/。但是,发布简单的纯java库或者Android Application库都比较简单,在github仓库中打个tag或者发布一下release,原创 2020-11-03 21:56:54 · 246 阅读 · 0 评论 -
利用PathMeasure实现路径动画
2019-01-04 21:47:21文章目录PathMeasuregetLength()getSegment()路径加载动画山寨支付宝支付成功动画我们可以利用路径动画实现很多好玩的东西,比如上面图中的类似支付宝支付完成的动画。主要用到了PathMeasure,ValueAnumator这两个类PathMeasure类似于一个计算器,可以计算一些和路径相关的东西。两种初始化方式:PathMeasure pathMeasure = new PathMeasure();pathMeasure.原创 2020-11-03 21:52:27 · 327 阅读 · 0 评论 -
Window和WindowManager
2017-03-21 20:05:01文章目录Window的内部机制Window的添加过程Window的删除过程Window的更新过程 Window表示一个窗口的概念,在日常开发中直接接触WIndow的机会并不对,再试在某些特殊时候我们需要在桌面上显示一个类似悬浮窗的东西,那么这种效果就需要用到Window来实现。 Window只是个抽象类,它的具体实现是PhoneWindow。创建一个Window是很简单的事,只需要通过WindowManager即可完成,WindowManager是外界访问Win原创 2020-11-03 21:47:38 · 143 阅读 · 1 评论 -
View绘制过程
2018-07-29 22:35:46文章目录MeasureSpecMeasureSpec和LayoutParamsView的工作流程measure过程layout过程draw过程抄的《Android开发艺术探索》第四章ViewRoot对应于ViewRootImpl类,它是连接WindowManager和DecorView的纽带,View的三大流程均是通过ViewRoot来完成的。在ActivityThread中,当Activity对象被创建完毕后,会将DecorView添加到Window中,同时会创原创 2020-11-03 21:46:44 · 117 阅读 · 0 评论 -
Android-View的滑动
2017-03-15 11:01:46文章目录一 VelocityTracker 和 GestureDetector二 使用ScrollTo/ScrollBy三 使用动画四 改变布局参数五 使用Scroller进行平滑移动View的位置主要由它的四个顶点来决定,分别对应于View的四个属性:top,left,right,bottom,其中top是左上角的纵坐标,left是左上角的横坐标,right是右下角的横坐标,bottom是右下角的纵坐标。需要注意的是,这些坐标都是相当于View的父容器来说的,因此原创 2020-11-03 21:45:49 · 209 阅读 · 0 评论 -
View事件分发
2018-07-29 11:28:20文章目录MotionEventTouchSloppublic boolean dispatchTouchEvent(MotionEvent ev)public boolean onInterceptTouchEvent(MotionEvent event)public boolean onTouchEvent(MotionEvent event)事件传递机制事件分发源码处理滑动冲突抄的《Android开发艺术探索》3.4.1 和 3.4.2MotionEvent原创 2020-11-03 21:44:24 · 105 阅读 · 0 评论 -
Toast显示过程
2018-08-03 11:35:14文章目录抄书抄的有点烦,自己也学着分析一下源码,挑了个在我看来比较简单的Toast显示过程来玩一玩。Toast.makeText(context, text, duration).show();先了解一下makeText过程,该过程最终都会调用下面的方法:/** * Make a standard toast to display using the specified looper. * If looper is null, Loope原创 2020-11-02 23:05:54 · 674 阅读 · 0 评论 -
Tinker初探
2018-03-10 12:35:18文章目录注册 TinkerPatch 平台SDK接入添加Gradle插件依赖集成 TinkerPatch SDK配置 tinkerpatchSupport 参数初始化 TinkerPatch SDK使用步骤在tinker-patch平台发布差异包前两天想试一下热修复的功能,对比各大平台的热修复功能,看到tinker的文档介绍,最终决定先拿Tinker试一下。TinkerQZoneAndFixRobust类替换yesye原创 2020-11-02 23:04:59 · 401 阅读 · 0 评论 -
MMKV与SharedPreference
2020-08-23 11:31:39文章目录存储方式如何选择sp的N宗罪SP优化MMKV与SPMMKV原理:来源https://github.com/Tencent/MMKV使用方式参考鉴于SP的"种种问题",萌发了想要使用写文件的方式替换掉sp的想法,发现腾讯开源MMKV是个不错的选择。存储方式SharedPreferencesContentProvider文件数据库如何选择时间开销这里说的时间开销包括了CPU时间和/0时间,在I/O优化中我就多次提到相比C原创 2020-11-02 22:58:29 · 1369 阅读 · 0 评论 -
JetPack中的WorkManager
2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。这次发布的 Android Jetpack 组件覆盖以下 4 个方面:Architecture、Foundation、Behavior 以及 UI。该系列博客介绍一下Jetpack中常用组件,本篇介绍LiveData、ViewModel、LifeCycle。最后借助于https://github.com/android/sunflower 来写一个完整的应用原创 2020-10-31 15:17:08 · 184 阅读 · 0 评论 -
JetPack中的Navigation
2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。这次发布的 Android Jetpack 组件覆盖以下 4 个方面:Architecture、Foundation、Behavior 以及 UI。该系列博客介绍一下Jetpack中常用组件,本篇介绍LiveData、ViewModel、LifeCycle。最后借助于https://github.com/android/sunflower 来写一个完整的应用原创 2020-10-31 15:16:07 · 245 阅读 · 0 评论 -
JetPack-sunflower
2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。sunflower with java,A gardening app illustrating Android development best practices with Android Jetpack.sunflower的java版本:园艺应用程序,说明了使用Android Jetpack进行Android开发的最佳做法。源码地址 <https://gith原创 2020-10-31 15:15:16 · 391 阅读 · 0 评论 -
JetPack中的Room
2018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。这次发布的 Android Jetpack 组件覆盖以下 4 个方面:Architecture、Foundation、Behavior 以及 UI。该系列博客介绍一下Jetpack中常用组件,本篇介绍Room,结合ViewModel和LiveData完成上图的结构。最后借助于https://github.com/android/sunflower 来写一个完整的应用原创 2020-10-31 15:14:26 · 472 阅读 · 0 评论 -
JetPack中的LiveData、ViewModel、LifeCycle
018年谷歌I/O 发布了一系列辅助android开发者的实用工具,合称Jetpack,以帮助开发者构建出色的 Android 应用。这次发布的 Android Jetpack 组件覆盖以下 4 个方面:Architecture、Foundation、Behavior 以及 UI。该系列博客介绍一下Jetpack中常用组件,本篇介绍LiveData、ViewModel、LifeCycle。最后借助于https://github.com/android/sunflower 来写一个完整的应用原创 2020-10-31 15:12:42 · 349 阅读 · 0 评论 -
Jenkins安装与使用
2017-06-28 17:30:42文章目录Jenkins 环境安装Jenkinsjenkins安装插件创建jenkins用户配置Jenkins创建一个新的Maven工程配置工程开始构建公司需求,业务越来越多,服务器越来越多,后台部署项目麻烦的要死,于是上了jenkins这货。关于这货是干嘛的,请移步这里https://jenkins.io/,下载请移步这里https://jenkins.io/download/安装环境:ubuntu 16.04、tomcat7(这个是因为Jenkins是个war原创 2020-10-31 15:11:19 · 101 阅读 · 0 评论 -
Java并发多线程同步
2018-03-20 10:43:39文章目录CountDownLatchCyclicBarrierSemaphore最近遇到了多线程并发同步问题,找到了java.util.concurrent包下的CountDownLatch、CyclicBarrier、Semaphore这三个类。CountDownLatch可以实现类似计数器的功能,例如线程A需要等待B、C、D三个线程执行完成之后才可以执行。CyclicBarrier可以实现让一组(多个)线程等待至某个状态之后再全部同时执行,当所有线程都被释放原创 2020-10-31 15:07:21 · 116 阅读 · 0 评论 -
groovy语法入门
2018-11-09文章目录注释单行注释、多行注释、文档注释 和java一致Shebang lineKeywordsIdentifiers 标识符正常标识符引用字符串字符串单引号字符串字符串连接三单引号字符串转义特殊字符双引号字符串字符串插值插入闭包表达式的特殊情况与Java的互操作性GString和String的hashCode三双引号字符串斜杠字符串美元符修饰的斜杠字符串字符串总结表字符数字整数可选择的非十进制表示小数有下划线的文本数字类型后缀数学运算除法运算符的情况幂运算情况布尔列表数组映射看了一原创 2020-10-31 15:00:18 · 1683 阅读 · 1 评论 -
Android中的gradle插件
2018-12-09文章目录如何应用一个插件应用二进制插件应用脚本插件apply方法的其他用法应用第三方发布的插件把插件应用到你的项目,插件会扩展项目的功能,帮助你在项目的构建过程中做很多事情。可以添加任务到你的项目中,帮你完成一些事情,比如测试、编译、打包。可以添加依赖配置到你的项目中,我们可以通过他们配置我们项目在构建过程中需要的依赖,比如变异的时候依赖第三方库等可以向项目中现有的对象类型添加新的扩展属性、方法等,让你可以使用他们帮助我们配置、优化构建,比如android{}这个配置块就是A原创 2020-10-31 14:59:05 · 229 阅读 · 0 评论 -
gradle基础--闭包及闭包委托
2018-11-11文章目录JavaBean闭包闭包的参数闭包委托参考自《Android Gradle权威指南》先来回顾一下groovy的一些基础语法调用方法的时候,圆括号是可以省略的,比如def method1(int a, int b){ println a+b}task invokeMethod <<{ method1(1,2) method1 1,2}定义方法时,return是可以不写的,比如def getMaxNumber(int a,原创 2020-10-30 23:23:09 · 892 阅读 · 0 评论 -
gradle任务
2018-11-19文章目录任务的创建方式直接以任务名的方式创建任务名字+任务配置的Map对象任务名字+闭包形式访问任务<<操作符任务执行分析任务排序任务的启用和禁用任务的onlyIf断言任务规则参考《Android Gradle 权威指南》第四章Gradle任务,主要介绍任务的创建方式、访问任务、任务分组和描述、<<操作符、任务的执行分析、任务排序、启用和禁用、断言、规则等。任务的创建方式直接以任务名的方式创建def Task temp = task(createTas原创 2020-10-30 23:21:49 · 436 阅读 · 0 评论 -
gradle-java插件
2018-12-19文章目录配置第三方依赖源码集合(SourceSet)发布构件当我们使用java插件时,只需要在gradle文件中应用apply plugin :'java'一下 就好了,插件中有很多默认的配置,比如源代码位置在src/main/java,src/test/java是单元测试用例的存放目录,src/main/resources是要打包的文件存放目录,比如配置文件和图片等。当然我们也可以改变java插件的默认配置,只需要在build.gradle中配置对应目录即可。sourceSets原创 2020-10-30 23:20:45 · 480 阅读 · 0 评论 -
gradle-android插件
2018-12-22文章目录应用Android插件Android Gradle 工程示例compileSdkVersionbuildToolsVersiondefaultConfigbuildTypesAndroid Gradle任务Android Gradle插件可以分为三类,分别对应Android中的三类工程:App应用工程,它可以生成一个可运行的apk应用,对应插件id:com.android.applicationLibrary库工程,可以生成AAR包给其他工程使用,对用插件id:com.原创 2020-10-30 23:19:54 · 429 阅读 · 0 评论 -
flutter路由简介
管理多个页面时有两个核心概念和类:[Route](https://docs.flutter.io/flutter/widgets/Route-class.html)和 [Navigator](https://docs.flutter.io/flutter/widgets/Navigator-class.html)。 一个route是一个屏幕或页面的抽象,Navigator是管理route的Widget。Navigator可以通过route入栈和出栈来实现页面之间的跳转。所谓路由管理,就是管理页面之间如何跳转原创 2020-10-30 23:18:23 · 532 阅读 · 0 评论 -
flutter性能瓶颈
2019-04-18文章目录如何分析Flutter 对Skia的调用如何捕捉SK Picture来分析每一条绘图指令常见Skia函数调用性能瓶颈最后跟着视频自己做了一下,https://www.bilibili.com/video/av48772383我在B站学flutter调优。。。。如何分析Flutter 对Skia的调用如何捕捉SK Picture来分析每一条绘图指令常见Skia函数调用性能瓶颈如何分析Flutter 对Skia的调用flutter run --profile -原创 2020-10-30 23:16:07 · 692 阅读 · 0 评论 -
Flutter异常处理
Flutter异常和Java异常类似,都是代码运行时发生的错误事件,我们可以通过与Java类似的try-catch机制来捕获这个异常,和java不同的地方在于 Dart 采用事件循环的机制来运行任务,各个任务的运行状态是互相独立的,也就是说,即便某个任务出现了异常我们没有捕获它,Dart 程序也不会退出,只会导致当前任务后续的代码不会被执行,用户仍可以继续使用其他功能。原创 2020-10-30 23:11:01 · 1149 阅读 · 0 评论