自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gdeer 的专栏

关注为什么

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

原创 详解 View 的构造函数

我们经常用到自定义 View,它有四个参数,但往往不太关心它们,等用到的时候就很容易混淆,今天来看看它们到底是什么意思。View( Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes ) AttributeSet attrs从 xml 中提取的 Attribute 集合,通过 context.obtainStyledAttributes 生成的 TypedA

2020-10-12 10:31:39 585

原创 集成 Google 登录

官网:https://developers.google.com/identity/sign-in/android/start-integrating基本按官网步骤进行,下面列举一些错误码。错误码code=7NETWORK_ERROR,检查网络是否通畅(是否科学)code=10sha1 签名不对如果已经设置过一遍,在设置的地方修改 sha1,最终的值不会改变,需要删除后重新添加才能生效。在 consoler 中可以查看和删除生成的 key。code=12500A non-recove.

2020-05-27 23:03:25 1420

原创 应用覆盖安装后桌面图标消失问题

一、现象当一个 app 有两个入口 Activity(标记了 main、launcher 的 Activity,如集成了 LeakCanary 的 app),安装后,桌面上会出现两个图标。当在 androidManifest 中删除一个 activity 或将其 disable,再覆盖安装,桌面上的两个图标都会消失(有些机器会这样,如 mix2;在模拟器上只有被删除或者 disable 的那个...

2020-04-11 12:14:19 2268

原创 Gradle 理解:incremental task

基于 Gradle 5.3.1文章目录一、概述1.1 incremental task 与 incremental task action1.2 判断标准二、执行实例2.1 IncrementalReverseTask 类2.2 IncrementalReverseTask 类型的 task2.3 第一次执行2.4 无改变第二次执行2.5 更新 input 后执行2.6 移除 input 后...

2020-04-06 11:56:24 5077

原创 为什么 Dialog 不能用 Application 的 Context

抛出的异常:Caused by: android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an applicationat android.view.ViewRootImpl.setView(ViewRootImpl.java:685)at android.view...

2020-04-05 10:44:10 306

原创 ConnectivityManager.CONNECTIVITY_ACTION 广播的粘性

项目中在 Application 初始化的时候监听了 ConnectivityManager.CONNECTIVITY_ACTION (即网络状态变化)的广播。结果每次 Application 初始化的时候都会收到这个广播,找了很久都没发现是哪里发的。后来才发现,原来这个广播是一个粘性广播,在每次注册的时候都会直接收到当前网络状态的一个广播。...

2020-03-13 16:44:15 1936

原创 gitignore 的模式匹配

gitignore pattern:空白行、# 开始的行会被忽略使用标准的 glob pattern 时,将会在整个文件树里递归匹配可以在前面加上 / 来阻止递归,只匹配当前目录可以在后面加上 / 来表明是一个目录(默认目录和文件都会匹配)可以在签名加上 ! 来对一个 pattern 取反glob pattern(和 shell 使用的简化的正则表达式很像):? 代表一个字符...

2020-03-13 16:37:01 511

原创 Gradle 理解:configuration、dependency

概念什么是 dependencies 的 configuration?不同的 configuration 用来引用不同领域(或不同用途)的 dependencies。如:implementation、api、testRuntime。也就是 configuration 用来管理一批 dependencies。configuration 的继承与复合...

2020-03-12 22:23:23 8503 1

原创 Gradle 理解:Artifact

文章目录一、概念ArtifactPublishArtifactConfigurablePublishArtifactartifact {}artifact {} 中内容二、使用2.1 使用 archives2.2 使用自定义 Configuration2.3 使用 maven 插件2.4 使用 maven-publish 插件一、概念Artifact翻译为:构件、工件。代表的是一个领域对象...

2020-03-11 23:23:36 3288

原创 Java 中的锁:悲观锁、乐观锁、自旋锁、偏向锁、公平锁、可重入锁、独享锁...

文章目录一、悲观锁、乐观锁二、自旋锁、适应性自旋锁三、偏向锁、轻量级锁、重量级锁四、公平锁、非公平锁五、可重入锁、不可重入锁六、独享锁、共享锁一、悲观锁、乐观锁这里的锁,是一种多线程同步操作资源的方式,即悲观方式与乐观方式。悲观方式:加锁,如:synchronized、ReentrantLock乐观方式:不加锁,如:concurrent 包的原子类不加锁是如何保证多个线程...

2020-03-04 11:44:26 902

原创 MotionLayout 的使用

文章目录一、概述二、设置项2.1 MotionScene 设置项2.1.1 基础项2.1.2 可配置属性2.2 MotionLayout 设置项一、概述MotionLayout 是 ConstraintLayout 的子类。每个 MotionLayout 需引用一个 MotionScene,其中包含相应布局的所有运动描述。MotionLayout:布局信息MotionScene:运动描...

2020-03-01 17:30:59 913

原创 Java 获取泛型对象的参数类型

文章目录一、类中有 class 信息二、父类中有 class 信息2.1 子类2.2 匿名子类三、持有者中有 class 信息由于类型擦除,java 中的泛型对象在运行时是不知道自己类型参数的类型的。但有几种特殊情况,能够获取泛型对象的参数类型:1、类中有 class 信息(类中有一个 Class 字段)2、父类中有 class 信息(父类是泛型类,并指定了参数类型)3、持有者中有 c...

2020-03-01 13:48:28 4385

原创 设计模式:工厂方法模式与抽象工厂模式

文章目录一、定义1.1 工厂方法模式1.2 抽象工厂模式二、类图三、实例3.1 Retrofit(2.5.0)3.2 Okhttp3(3.12.0)3.3 Glide(4.9.0)一、定义1.1 工厂方法模式工厂方法模式,又称工厂模式着重于方法,一个工厂只有一个方法,生产一种产品。(我称之为,单方法工厂模式)abstract class BaseFactory { abstra...

2020-02-25 21:51:42 168

原创 Retrofit 源码解析

文章目录一、名词解释二、使用三、原理四、问题一、名词解释Service:定义的接口类ServiceMethod:Service 中的方法Call<R>:参数类型是 R 的 Call,实际发起网络请求的类responseType(R):Call<> 的参数类型;如 Call<AClass> 的 responseType 为 AClassCallAdap...

2020-02-25 21:30:19 147

原创 类图的图示和关系说明

框中的符号+ public- private# protected~ default_ static斜体 抽象图示参考:维基百科类图、IBM 类图说明关联、聚合、组合:可以带箭头,也可以不带监听关系说明参考:知乎、掘金继承、实现很清晰,表示两个类的归属关系。依赖、关联、聚合、组合的界限并不清晰,它们表示两个类的引用关系,关系强弱:依赖 < 关联 < 聚合 ...

2020-02-22 20:42:43 360

原创 ARouter 源码解析

一、名词解释Postcard:明信片,用于发起启动请求path:指定一个请求的路径:如 /modulea/homegroup:path 的分组,为 path 中的第一个节点:如 moduleaRouteMeta:存储基础路由数据(如 Activity 类对象等)xxxService:接口,用于提供某种功能,继承了 IProvider 接口;如要使用,需自己实现接口routes:path...

2020-02-21 17:23:51 237

原创 后台启动 Activity

Android 21 及以上,可以通过 makeTaskLaunchBehind 来在后台启动一个 Activity。执行代码:val intent = Intent(this, ActivityA::class.java)intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT)val compat = ActivityOptionsCompa...

2020-02-18 20:01:09 900

原创 加载外部 apk 中的资源

文章目录原理实例原理apk 中的资源放在 resources.arsc、assets 中,它们都要靠 AssetManager 来访问,我们又通过 Resources 来调用 AssetManager。要访问外部 apk 中的资源,就要通过该 apk 的 resources.arsc,创建一个新的 AssetManager 和一个新的 Resources。实例下面的例子,会在宿主 ap...

2020-02-18 16:38:15 567 1

原创 启动没有在 AndroidManifest 中注册的 Activity

文章目录一、报错二、思路三、启动流程3.1 hook 点的选择3.2 版本差异四、代码4.1 Hook4.2 替换点4.3 恢复点一、报错启动没有在 AndroidManifest 中注册的 Activity,会报错:android.content.ActivityNotFoundException: Unable to find explicit activity class {...};...

2020-02-12 22:15:05 1960 7

原创 ListView 嵌套 ListView,为什么里面的 ListView 不能滑动

ListView 嵌套 ListView,child 是不能滑动的,为什么呢?我们来看看。文章目录一、源码分析二、结论2.1 不做处理的 ListView 嵌套 ListView2.2 重写父 ListView 的 onInterceptTouchEvent(),使其返回 false一、源码分析ListView 的滚动在 scrollIfNeeded() 方法中实现。scrollIfNee...

2019-12-27 16:19:49 594

原创 ClassLoader 加载外部 apk 内的普通类

新建工程 SimpleApk,新建 Person 类:package com.gdeer.simpleapk;public class Person { private String name; public String getName() { return name; } public void setName(String name) {...

2019-12-13 16:31:28 344

原创 Android Studio run 失败 Failed to process

Failed to process E:\WeatherAndroid\app\build\intermediates\transforms\profilers-transform\debug\63.jar同步成功、run 失败。在特定机型上出现该问题,如移动 M652,api 22,5.1。在 stackoverflow 上查到,可以通过关闭 Advanced profiling 来解决...

2019-12-11 16:31:38 1042

原创 小程序开发问题记录

1、class 找不到现象:模拟器里正常运行,真机上报错 class 找不到原因:被混淆了解决:去掉混淆2、wxml 中的 item 属性无法访问现象:wxml 中的 item 属性无法访问原因:data 里存的是一个 json解决:将对象转为 json 再存入 data3、刷新不停止现象:下拉刷新不停止原因:遇到了异常,停止代码没执行解决:解决异常,加入 catch4、...

2019-12-11 16:08:02 194

原创 Kotlin 和 Groovy 的 lambda 对比

文章目录一、格式1.1 完整格式1.2 简化格式二、trailing lambda2.1 三个参数2.2 一个参数三、it3.1 作为入参3.2 赋值给变量四、lambda 的返回值五、无用变量的处理六、外部变量的访问七、invoke一、格式1.1 完整格式// Kotlinval sum: (Int, Int) -> Int = { x: Int, y: Int -> x +...

2019-10-29 10:36:12 1791

原创 以彼之道,还施彼身:Android 模拟定位

思路两种方式:TestProvider反射将高德地图返回的数据再传给我们自己的应用。

2019-10-28 16:15:05 496

原创 将自己的库发布到 JitPack

JitPack 的 GitHub 地址:https://github.com/dcendents/android-maven-gradle-plugin文章目录集成插件打 tag集成插件在 module 集成插件:// 根 build.gradlebuildscript { repositories { mavenCentral() /...

2019-10-28 15:13:41 288

原创 Fiddler 插件开发:数据解密

本文介绍了 Fiddler 插件开发的基础知识,并以一个数据解密插件开发的实例讲述了开发的过程。文章目录Fiddler 插件基础知识开发环境安装 Visual Studio开启 fiddler debug 功能数据解密插件开发需求新建 C# 类库添加 Fiddler 的引用添加 Fiddler 版本信息实现接口运行调试效果代码Fiddler 插件基础知识插件的形式是一个 dll 文件,插...

2019-10-26 14:12:22 5199 8

原创 Kotlin 基础:泛型

本文介绍 Kotlin 中的泛型,可与 Java 中的泛型 配合食用。文章目录一、为什么要有泛型二、泛型的分类三、泛型的关键字3.1 T3.2 out3.3 in四、泛型类、方法的定义4.1 泛型类的定义4.2 泛型方法的定义五、泛型类、方法的使用5.1 泛型实现类5.2 通配类5.2.1 AClass\一、为什么要有泛型效率、成本减少样板代码的编写二、泛型的分类泛型类泛型方...

2019-10-25 16:03:14 246

原创 Java 基础:泛型

文章目录一、为什么要有泛型二、泛型的分类三、泛型的关键字3.1 T3.2 ?四、泛型类、方法的定义4.1 泛型类的定义4.2 泛型方法的定义五、泛型类、方法的使用5.1 泛型实现类5.2 通配类5.2.1 AClass<?>5.2.2 AClass<? extends BClass>5.2.3 AClass<? super BClass>六、代码示例一、为什么...

2019-10-25 11:16:23 373

原创 Git rev-list 详解

官网:https://git-scm.com/docs/git-rev-list本文基于官网介绍,结合实例解释 rev-list 的使用文章目录一、功能二、基本三、限制四、待续一、功能按时间倒序列出 commit(即 reverse-list)二、基本$ git logE - (HEAD -> master) addE (10/19/2019 13:31:19) <g...

2019-10-21 17:01:17 22198 1

原创 Windows 定时执行 Python 程序

文章目录计划任务注意事项计划任务找到 “控制面板-计划任务”创建基本任务填写名称、描述设置触发时间设置执行动作选择 pythonw.exe,添加参数,即要执行的 .py 文件。完成。在面板中间可看到新建的任务,双击或右键,可编辑、运行。注意事项python.exe 与 pythonw.exepython.exe 会弹出命令行...

2019-10-21 11:52:25 270

原创 Ant 的模式匹配

Jenkins 的 Files to archive 需要按 Ant 的模式匹配去寻找文件,这里记录一下。官网(主要看 Example)* :匹配 0 个或多个字符(不包含分隔符 /)? :匹配一个字符** :匹配 0 个或多个目录(如果模式以 ‘/’ 或 ‘’ 结尾,则会自动补上 **)模式解释**/CVS/*匹配所有 CVS 目录下的所有文件(不包括下层文件...

2019-09-29 15:25:16 1263

原创 Kotlin 笔记:密封类与代数数据类型

一、密封类Kotlin 类开放性排序普通类(不加修饰符,不能继承,默认是 final 的)密封类(sealed 修饰符,有条件继承)开放类(open 修饰符,无条件继承)密封类的限制可以继承,但只能在当前文件继承在本类内继承在类外被同级类继承(不能在一个同级类的内部被继承)sealed class A { class B: A() // OK, B is no...

2019-09-29 13:19:46 317

原创 Java 基础:枚举

枚举的写法enum Shape { Circle, Rectangle, Triangele}实际生成的类// 反编译 Shape.classfinal class Shape extends Enum { // 编译器为我们添加的静态的 values() 方法 public static Shape[] values() { r...

2019-09-29 13:06:39 229

原创 Kotlin 笔记:内部类与嵌套类

与 Java 的关系:kotlinJava嵌套类静态内部类内部类内部类嵌套类:一个直接在其他类内部声明的类是嵌套类。Java 比较开放,默认情况下,认为这个嵌套类可以访问外部类。Kotlin 比较封闭,默认情况下,认为这个嵌套类不能访问外部类。Kotlin 希望默认情况(不作特)下,两个类是没有关系的,所以在一个class Outer { p...

2019-09-27 15:25:14 161

原创 Bitmap 使用 Matix 进行缩放时 filter 参数的含义

方法:public static Bitmap createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) { ...}filter:是否对源 bitmap 执行滤波处理。只在 matrix 包含大于要转换的内容时应用。(感觉上好像是说在放大时才有效)滤...

2019-09-27 11:44:45 765

原创 Failed to delete \build\intermediates\intermediate-jars\debug\classes.jar

* What went wrong:Execution failed for task ':lib:transformClassesAndResourcesWithPrepareIntermediateJarsForDebug'.> java.lang.RuntimeException: java.io.IOException: Failed to delete E:\TestAndro...

2019-09-26 09:26:32 1203 1

原创 Android Gradle 提速实战

文章目录一、官方建议二、build cache三、parallel四、build scan五、Apply Change一、官方建议官方建议在这里,大部分都是常规操作,下面简单列举下:使用最新的 Android Gradle 插件常规操作。避免激活旧的 Multidex常规操作,2.3 之后的 Android Studio 会自动规避。禁用 Multiple APK 构建国内一般都...

2019-09-25 22:04:09 415

原创 ShareSdk 编译报错问题

在执行 gradlew asembleDebug --scan 命令时,编译不通过,报错如下:* What went wrong:A problem occurred evaluating project ':app'.> Failed to apply plugin [id 'com.mob.sdk'] > No such property: url for class:...

2019-09-25 14:26:03 880

原创 双拼、kotlin、依赖倒置

最近在练习用双拼打字。双拼,即每个字都用两个键打出来。比如,“中国”这两个字,用全拼打出来的话,需要按的键是:z、h、o、n、g、g、u、o。如果是双拼(以小鹤双拼为例),就是v、s、g、o。这相当于很多的快捷键,一个键可以代表多个字母:v(zh)、s(ong)、g(g)、o(uo)。按键少了,速度自然更快,字的匹配度也会变高。只是这些快捷键的记忆需要练习。这种将汉字分为 声母 +...

2019-09-24 10:33:54 167

Android Studio 插件——OnClickJump

Android Studio 插件,通过 setOnClickListener 一键跳转 OnClick 方法。

2019-02-21

空空如也

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

TA关注的人

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