自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Android 一亩良田

技术类文章与问题杂谈

  • 博客(54)
  • 资源 (6)
  • 收藏
  • 关注

原创 设计模式 - 代理模式、委托模式

前言个人认为代理模式和委托模式没有本质的区别,虽然很多书和Blog区分两中设计模式,但是这两种设计模式都是为其他对象提供代理服务,利用新的对象来对真实对象的属性或者方法实现隔离,防止外部直接访问真实对象;其实从下面例子中可以发现,委托的例子只是在代理对象中多了真实对象的转换而已,其实本质没有变化;Java或者Android系统中的代理或者委托应用系统中使用动态代理非常多,但是静态代...

2019-07-23 20:35:38 667

原创 Java和Kotlin单例模式

Java 和Kotlin的单例模式其实很像,只是Kotlin一部分单例可以用对象类和委托lazy来实现Java/** * 懒汉式,线程不安全 */class Singleton { private static Singleton instance; private Singleton() { } public static Singleton get...

2019-07-23 15:08:50 267

原创 Android Studio 新的依赖配置对比

依赖项配置在 dependencies 代码块内,您可以使用几种不同依赖项配置中的一种(例如上文所示的 implementation)声明库依赖项。 每项依赖项配置都为 Gradle 提供有关如何使用依赖项的不同说明。 下表介绍您可以在 Android 项目中对依赖项使用的每种配置。 此表还将这些配置与自 Android Gradle Plugin 3.0.0 起弃用的配置进行比较。新...

2019-07-17 18:11:54 585

原创 Kotlin 操作符的重载其实很简单

前言之前虽然了解操作符,但是一直对操作符重载有点懵,今天重新梳理了一下,其实很简单什么是操作符这个问题官网和Kotlin中文都有,博客也很多,可以先看下:Kotlin中文网:https://www.kotlincn.net/docs/reference/operator-overloading.html做一点补充:其实操作符就是Kotlin内置了一堆符号与操作的映射,举个例子就...

2019-07-15 17:31:12 604

原创 Kotlin 操作符重载其实很简单

前言之前虽然了解操作符,但是一直对操作符重载有点懵,今天重新梳理了一下,其实很简单什么是操作符Kotlin 允许我们为自己的类型提供预定义的一组操作符的实现。这些操作符具有固定的符号表示 (如 + 或 *)和固定的优先级。为实现这样的操作符,我们为相应的类型(即二元操作符左侧的类型和一元操作符的参数类型)提供了一个固定名字的成员函数或扩展函数。 重载操作符的函数需要用 operator...

2019-07-15 17:29:23 33

原创 Jenkins+Gradle+360加固+蒲公英+修改版本号+多渠道打包

旨在规范打包流程,简化打包步骤,降低打包出错风险;实现的功能选择分支构建安装包自动加固加固包自动分发下载链接、二维码展示成品归档应用仓库选择自动修改版本号多渠道打包未来要做的功能逻辑全部移植到Gradle中,在Gradle中完成有以下好处:Jenkins就只充当工具,不包含逻辑,降低Jenkins维护成本;维护升级只需要在Gradle中就可以;使用命令一样能用...

2019-07-01 16:03:43 76

原创 Android LocalBroadcast 发送广播更加方便快捷高效的方式

LocalBroadcast是一个应用内的局部广播,广播范围只限于应用内部,并且不属于四大组件,相对高效很多,可以用来实现事件总线,相比其他事件总线实现方案,先对简单,高效。优点广播范围只限于应用内部,不会出现数据泄漏和安全漏洞问题;相对于系统广播,更加高效便捷;相对于其他事件总线框架,实现简单,高效,不存在例如EventBus事件类代码区域划分问题;可以集中管理Action,使用...

2019-06-24 16:28:21 513

原创 RecyclerView优化:SortedList的使用

SortedList算不上优化,如果列表有排序的话,可以使用这个集合来代替,实现SortedListAdapterCallback.compare(Item t0, Item t1) 方法,来进行排序;比较方便和高效;原理内部数据操作大部分使用了二分查找,例如单个数据的插入,先用二分查找找出要插入的位置,然后插入;//找到插入的位置,注意条件left < rightprivat...

2019-06-18 20:47:15 772

原创 RecyclerView优化:AsyncListDiffer的使用

AsyncListDiffer实际上是DifferUtil+Async,对DifferUtil进行了封装,实现数据比较时在异步线程,任务完成自动切换到主线程更新UI;对AsyncListDiffer的使用可以直接参考或者继承androidx.recyclerview.widget.ListAdapter,里面直接做了这部分工作,将更新后的数据集合直接submit就可以了;原理,很简单pr...

2019-06-18 19:54:00 2063

原创 RecyclerView优化:AsyncListUtil的使用

AsyncListUtil 可以异步加载数据,并根据列表滑动会自动分页加载,数据加载完成会回调主线程更新UI,并且可以在Item离屏后实现Recycle缺陷refreshData()方法需要指定数据总条数,只能在调用AsyncListUtil.refresh()方法时指定,无法动态设置数据总数,如果是接口获取数据,必须已知数据总条数;fillData(data: Array<T&...

2019-06-18 16:20:21 570

原创 Android Manifest Activity不常用的属性

遇到的场景使用当第三方应用调用App分享时,会产生两个任务栈,如果将主App的任务栈关闭,会导致点击Logo时无法启动App//确保分享动作是连续的,如果中断的话,那么就要重新分享;//还可以防止分享中途,数据源变化,导致分享数据不正确;//将分享面板的activity添加以下属性android:noHistory=["true" | "false"]//解决切换App或者屏幕,销毁...

2019-06-18 15:28:13 238

原创 RecyclerView优化:DiffUtil的使用

RecyclerView相比ListView已经有局部的定向更新,但是如果涉及到大量的数据的更新,比如执行刷新操作后,正常需要替换所有的数据,然后调用adapter.notifyDataSetChanged()进行全量更新;但是可能出现界面闪烁;另外大多数时候有一部分数据其实没有变化,理论上并不需要重新绑定;DiffUtil使用场景存在更新前和更新后的两个数据集合可以用来对比,如果直接操...

2019-06-15 17:23:27 614

原创 Android WebView 播放视频问题

硬件加速(三种)Application级别<application android:hardwareAccelerated="true">Activity级别<activity android:hardwareAccelerated="true" />View级别webView.setLayerType(View.LAYER_TYPE_SOFTWARE, nu...

2019-06-15 12:37:46 609

原创 位运算

以8位为例,位数不足,用0补齐,例如5的二进制是101,则为0000 0101反码0、1互换,按位取反则为反码原码 0000 0011反码 1111 1100补码,二进制中的负数反码+1则为补码,补码在计算机表示负数原码 0000 0000 0000 0000 0000 0000 0000 0011反码 1111 1111 1111 1111 ...

2019-06-14 12:46:40 76

原创 Java 浅克隆、深克隆

浅克隆只复制了基本数据类型和String数据类型以及对应的数组类型,其他引用数据类型只是复制了引用地址;使用方式实现Cloneable接口,然后重写clone方法,调用super.clone()即可public static class Person implements Cloneable { @Override protected Person clone...

2019-06-01 20:39:00 226

原创 RecyclerView 滑动到指定位置

看一下RecyclerView有哪些滑动的ApirecyclerView.scrollTo(int x, int y) ,虽然提供,但是没有实现,不支持;recyclerView.scrollBy(int x, int y),必须设置了LayoutManager,否则报错,因为内部调用了LayoutManager.scrollHorizontal...

2019-05-30 23:49:00 1204

原创 Android NDK CMake 编译问题

先吐槽一波,Google是对Android的维护是真乱,版本控制乱七八糟,改一个版本,影响一片Android SDK VersioncompileSdkVersionminSdkVersiontargetSdkVersionbuildToolsVersiongradle tools Versiongradle plugin Version...

2019-05-30 20:45:00 245

原创 Android WebView JsPrompt方法message长度限制问题

问题描述在调用WebViewChromeClient的onJsPrompt()时,利用message来实现Js与native之间的交互,在不同的手机中,对于message的长度限制不同,华为超长会自动截取,目前发现最长10225 charException.png ...

2019-05-29 14:55:00 1324

原创 8种排序算法

public class SortCode { /** * 1.直接插入排序 * <p> * 直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是...

2019-05-22 08:09:00 79

原创 RecyclerView的缓存真是4级吗?

网上的大多数博客都是认为RecyclerView是4级缓存,但真的是4级缓存吗?知道我看了源码,才发现,RecyclerView做的远远不止4级缓存,当然是根据LayoutManager不同,缓存实现也不同,本文主要分析最最常用的LinearLayoutManager。写的有点乱,以后整理吧RecyclerView复用过程RecyclerView的中的缓存复用是由内部类Recycle...

2019-05-21 10:20:05 731

原创 Activity 调用setContentView,加载视图过程分析

直接撸代码扛不住直接翻到后面,但是不看代码,只看结论,对于学习是没有什么帮助的先初始化PhoneWindow:Activity 在创建出来之后,会调用attach方法,在这里面会创建PhoneWindow,并初始化WindowManager,WindowManagerService就是Binder的本地代理对象,用于向系统Window中添加我们视图; final void Activi...

2019-05-19 12:27:58 159

原创 Android OOM问题的What Where How

知己知彼,百战不殆。要想解决和避免OOM,必须先知道OOM是什么,在哪里会发生,最后才是怎样去解决OOM;What?什么是OOMOOM --> java.lang.OutOfMemoryError内存溢出,应用内存占用过高,虚拟机无法再分配更多的内存,这时系统就会抛出OOM,JVM规范中划定了大部分区域的内存的管理,可参考JVM规范官方文...

2019-05-17 21:24:00 68

原创 Android OOM问题的What Where How

知己知彼,百战不殆。要想解决和避免OOM,必须先知道OOM是什么,在哪里会发生,最后才是怎样去解决OOM;What?什么是OOMOOM --> java.lang.OutOfMemoryError内存溢出,应用内存占用过高,虚拟机无法再分配更多的内存,这时系统就会抛出OOM,JVM规范中划定了大部分区域的内存的管理,可参考JVM规范官方文档:https://docs.oracle...

2019-05-17 21:23:51 109

原创 Java 字节码阅读

很多时候我们通过代码无法了解字节码执行过程,比如Try Catch Finally的执行过程,只有通过debug或者阅读字节码才能搞懂JVM是如何编译和设计执行流程的。public class TestTryCatch { public String inside() { int a = 1; int b = 10; a = b; ...

2019-05-17 10:16:31 123

原创 Google MVVM 中的 ViewModel 设计

架构设计原则要遵循的最重要的原则是分离关注点,也就是解藕,遵循单一职责原则。一种常见的错误是在一个 Activity 或 Fragment 中编写所有代码。这些基于界面的类应仅包含处理界面和操作系统互动的逻辑。应尽可能使这些类保持精简,这样可以避免许多与生命周期相关的问题。请注意,并不拥有 Activity 和 Fragm...

2019-05-14 22:50:49 236

原创 Java Json数据中有双引号"未转义的解析报错

例如Json数据中有双引号,解析时会报Json格式错误或者转义有问题{ "content": "重要任务提醒", "matterName": ""德勤57"装砂滞留船期损失案"}可以在解析前现将Json格式化一遍,这里面主要是双引号匹配的查找 public static String formatErrorJson(String s) { char[] temp ...

2019-05-13 20:26:03 2410 1

原创 Java ClassLoader类加载机制(二)类加载器

1. 类加载的种类启动类加载器,Bootstrap ClassLoader,最顶层的加载类,主要加载核心类库,%JRE_HOME%\lib下的rt.jar、resources.jar、charsets.jar和class等。另外需要注意的是可以通过启动jvm时指定-Xbootclasspath和路径来改变Bootstrap ClassLoader的加载目录。比如java -Xbootclass...

2019-04-29 16:54:35 109

原创 OpenJDK 或者 HotSpot 虚拟机源码下载

1. 源码地址http://hg.openjdk.java.net/打开后是这样2. 选择要下载的源码(例如:jdk8u)http://hg.openjdk.java.net/jdk8u3. 选择JDK或者或者HotSpot可以看到JDK提交记录选择browse,进入。4. 下载选择打包格式下载,完成...

2019-04-29 15:34:19 821

原创 Java ClassLoader类加载机制(一)原理

类加载的理论知识1. 类的生命周期生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中验证、准备、解析3个部分统称为连接(Linking)2. 类什么时候初始化?遇到new、getstatic、putstat...

2019-04-26 16:06:22 217

原创 单链表

public class SingleLinkedList<T> { private Node header; private int size; private class Node { private T data; private Node next; public T getData() { ...

2019-04-26 10:11:34 205

原创 数据结构与算法大纲

王争课程笔记10 个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树10 个算法:递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法。...

2019-04-26 10:11:26 160

原创 ESLint VSCode 代码保存自动格式化配置

{ // vscode默认启用了根据文件类型自动设置tabsize的选项 "editor.detectIndentation": false, // 重新设定tabsize "editor.tabSize": 2, // #每次保存的时候自动格式化 "editor.formatOnSave": true, // #每次保存的时候将代码按e...

2019-04-26 10:11:19 158

原创 算法复杂度分析

算法复杂度作用数据结构和算法本身解决的是“快”和“省”的问题,即如何让代码运行得更快,如何让代码更省存储空间。所以,执行效率是算法一个非常重要的考量指标。多项式阶:随着数据规模的增长,算法的执行时间和空间占用,按照多项式的比例增长。包括,O(1)(常数阶)、O(logn)(对数阶)、O(n)(线性阶)、O(nlogn)(线性对数阶)、O(n^2 )(平方阶)、O(n^3 )(立方阶...

2019-04-26 10:11:06 166

原创 Java和Kotlin类的初始化顺序

JavaJava程序初始化的顺序:父类静态变量 -> 父类静态代码块 -> 子类静态变量 -> 子类静态代码块 -> 父类非静态变量 -> 父类非静态代码块 -> 父类构造器 -> 子类非静态变量 -> 子类非静态代码块 -> 子类构造器。Java程序初始化一般遵循3个原则:静态对象(变量)先于非静态对象(变量)初始化。其中静态对象(变...

2019-04-26 10:10:46 1201

原创 Idea或Android Studio查看字节码

在Preference中添加External Tools,保存就能用了;效果

2019-04-26 10:10:37 911

原创 搭建博客教程那么多,还是一波三折

前言几年工作中,自己积累了一些工作经验,感觉不妨搭建博客站点来记录一些技术点,并能分享给其他开发者,省得更多的人造轮子。本来第一篇文章是想写有关Android的――新建博客也是为此。但是在搭建博客过程中,发现即使网上的教程非常多,自己依旧走了很多弯路。所以索性趁热先将这个问题说下。github pages可以先按照网上的博客来创建githubpages,例如:http://blog.cs...

2019-04-25 11:52:36 110

原创 Android 系统架构图

可以查看 https://developer.android.com/guide/platformAndroid 是一种基于 Linux 的开放源代码软件栈,为广泛的设备和机型而创建。下图所示为 Android 平台的主要组件。Linux 内核Android 平台的基础是 Linux 内核。例如,Android Runtime (ART) 依靠 Linux 内核来执行底层功能,例如线程和低...

2019-04-25 10:56:41 6714

原创 三张图搞定TCP 握手、HTTPS、TLS加密过程

1. 抓包内容2. 一张图搞定握手、挥手、SSL加密过程

2019-04-25 10:56:27 2814

原创 Android 三层架构

2019-04-25 10:43:05 1629

原创 Android Studio 本地仓库关联Git仓库

1. 首先将本地仓库启用Git2. 关联远程仓库3. 同步远程仓库,选master分支,否则本地和远程分支不一致完成,之后就可以正常提交了,如果有分支冲突可以选择合并策略:Strategy合并策略(来源:https://www.jianshu.com/p/58a166f24c81)Git可以通过添加-s参数来指定合并的策略。一些合并策略甚至含有自己的参数选项,通过-X设置这些合并...

2019-04-25 10:41:54 3266

Realm Studio-3.5.0.dmg

RealmBrowser,查看Realm数据库,免费破解版,绿色无毒

2019-05-15

AndroidPlayer(仿酷狗播放器)

不错的代码,仿照酷狗做的播放器android 播放器 player 仿酷狗 音乐播放器

2015-12-10

【手机安全卫士02】连接服务器获取更新信息

android 手机安全卫士 连接服务器获取更新信息 软件升级 应用升级 获取数据

2015-12-10

android程序员向导文档

android 程序员 向导 文档 api,比较好针对初学者

2015-12-10

android 中文 API 大全 文档

android中文API大全文档,比较详细全面的文档

2015-12-10

VideoRecord

实现视频录制播

2015-07-28

空空如也

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

TA关注的人

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