自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

原创 Android复杂View或者不同状态View拆分的一种思路

问题由来我们在项目中开发界面UI的时候,肯定遇到过要根据不同的返回值类型展示相应UI的操作。如我们的网络请求,我们在无网络的时候会显示暂无数据界面,在网络数据返回异常的情况下会展示网络异常请重试的UI。当遇到上面的需求我们通常是怎样做的呢?我想肯定有一部分人是将网络有关的UI写在了一个layout文件中,然后在别的布局中进行引用。但是有没有人思考过这样写好不好。好我们接下来看,如果后期需求...

2020-04-28 17:09:34 1148

原创 散列表

散列表散列函数典型的例子正整数浮点数字符串组合键java的约定将hashCode()的返回值转化为一个数组索引软缓存基于拉链法的散列表如果所有的键都是小整数,我们就可以使用一个数组来实现无序的符号表,将键作为数组的索引而数组中键i处存储的就是它对应的值。这样我们就可以快速访问任意键的值。下面我们说的散列表,它是这种简易方法的扩展并能够处理更加复杂的类型的键。我们需要用算数操作将键转化为数组的索引...

2019-09-17 13:24:30 340

原创 红黑二叉查找树

红黑二叉查找树上一篇中的2-3树的插入算法并不难理解,接下来我们看一种名为红黑

2019-09-12 18:49:58 333

原创 平衡查找树

平衡查找树2-3查找树在前面我们说了二叉查找树,它在最坏的情况下是很糟糕的。下面我们来说一种查找树,这种这查找树能够保证无论如何构造它,它的运行时间都是对数级别的。理想情况下我们希望能够保持二分查找树的平衡性。在一棵含有N个结点的树中,我们希望树的高度为lgN,这样我们就能保证所有查找能在lgN次比较内结束,就和二分查找一样。2-3查找树为了保证查找树的平衡性,我们需要一些灵活性,因此在这里...

2019-08-29 18:44:55 223

原创 二叉查找树

查找算法

2019-08-28 18:39:05 160

原创 由java.util.Objects类引发的对于编程的感想

由java.util.Objects类引发的一些感想Objects类介绍部分方法介绍一些感触Objects类介绍Objects和Object 看起来很像,估计有一部分人是不知道它是干什么的,更没有使用过这个类。Object 是 Java 中所有类的基类,位于java.lang包。/** * @since 1.7 */public final class Objects { p...

2019-08-23 19:12:10 306

原创 CreateProcess error=2, 系统找不到指定的文件 解决方法

CreateProcess error=2, 系统找不到指定的文件 解决方法一般这是由于ndk缺少文件引起的解决方法1:在项目根目录下的local.properties文件中加cmd后缀方法二下载16b的版本替换原来的ndk-bundle目录,默认在C:\Users\用户名\AppData\Local\Android\Sdk\ndk-bundle目录新版本的ndk缺少了龙芯cpu所需...

2019-08-23 14:10:51 68217 2

原创 基于arouter模块间通信的简单封装--使便于使用

优先队列(数组实现)

2019-08-15 18:54:28 1534

原创 优先队列(数组实现)

优先队列堆的定义二叉树表示法在有点时候我们不一定要使数组中的多有元素都有徐,我们每次只需要处理数组中的最大值,然后再收集更多的元素。例如,你可能有一台能同时运行多个应用的电脑或手机。这是通过为每个应用程序的时间分配一个优先级,并总是处理下一个优先级高的事件来实现的。在这种情况下,一个合适的数据结构应该支持两种操作:删除最大元素和插入元素。这种数据类型叫作优先队列。优先队列的使用和队列(删除最老...

2019-08-12 18:28:06 1847

原创 享元模式(对象共享)

享元模式使用环境示例享元模式在Android中的应用如果在某个场景需要很多重复的对象,你会每次都创建一个对象吗?显然重复的创建大量对象是一种很差的体验。这是享元模式就可以帮到我们了,使用享元模式我们可以达到对象共享,避免创建过多的对象,从而提升性能,避免内存泄漏等。使用环境存在大量相同的对象需要缓冲池的场景示例就拿火车售票系统来说,如果有成千上万的人搜索从北京到天津的火车票信息,如...

2019-08-09 13:22:05 368

原创 原型模式(克隆)

原型模式描述什么地方比较适合使用?原型模式是一种较为简单的设计模式描述原型模式是一个创建型的模式,原型就是可供复制的模板,通过复制原型得到一个新的实例,这个过程我们俗称为“克隆”。被复制的实例就是我们所说的“原型”。什么地方比较适合使用?类初始化时需要消耗较多的资源,包括数据,硬件资源等,通过拷贝避免这些消耗。通过new产生一个对象需要非常繁琐的数据准备或访问权限。...

2019-08-07 13:34:10 268

原创 简单易懂的Scroller使用及源码探究

Scroller的使用及源码探究实现源码分析实现Scroller可以用于实现View的弹性滑动,我们知道View的scrollTo/scrollBy方法都可以实现滑动,但是他们都是瞬时完成的,不能做到平滑的过渡。而Scroller可以。想要完成平滑移动Scroller需要和computeScroll方法配合使用。代码如下:Scroller mScroller = new Scroller(m...

2019-07-31 13:48:08 266

原创 Android webview加载h5出现空白页问题记录

队列

2019-07-30 16:15:34 1693

原创 面试中的快速排序实现及思想

快速排序

2019-07-24 13:51:01 365

原创 归并排序

归并排序

2019-07-23 19:43:04 207

原创 希尔排序

希尔排序

2019-07-22 11:03:42 232

原创 插入排序

插入排序

2019-07-19 11:11:11 215

原创 排序算法前言及选择排序

排序算法前言辅助函数排序就是将一组数据按照某种特定的逻辑进行重新的排列的过程。比如将一个数据按照由大到小的顺序排列。我们接下来将说明两种初级的排序算法的实现,我们要从简单的排序算法慢慢的往下深入。在这里我们要通过它熟悉一些简单的技巧。辅助函数sort():我们回吧排序代码放到类的sort()方法中。...

2019-07-18 15:48:35 322

原创 Activity的生命周期与启动模式记录

高级自定义构建

2019-07-17 16:29:22 247

原创 高级自定义构建

高级自定义构建减少APK文件的大小ProGuard缩减资源自动缩减手动缩减加速构建Gradle参数Profiling忽略减少APK文件的大小在过去几年中,APK文件的大小曾成急剧增长态势。一般来说,其原因如下:Android开发者获取了更多的依赖库,添加了更多的密度,Apps增加了更多的功能。但实际上我们应该让APKs尽可能的小。不仅是因为在Google Play中,APK文件有50MB的限...

2019-07-11 13:58:23 300

原创 Gradle Hook到Android插件

Hook到Android插件

2019-07-10 10:05:41 584 1

原创 ERROR: Could not find com.android.tools.build:gradle:3.3.2.

今天导入一个三方的demo同步时报:ERROR: Could not find com.android.tools.build:gradle:3.3.2.Searched in the following locations: - https://jcenter.bintray.com/com/android/tools/build/gradle/3.3.2/gradle-3.3.2.po...

2019-07-05 09:50:38 893

原创 Gradle任务入门

任务入门定义任务任务剖析自定义Gradle tasks可以显著提高一个开发者的日常生活。任务可以操作存在的构建过程,添加新的构建步骤,或影响构建输出。你可以运行简单的任务,例如通过hooking到Gradle的Android插件,给一个生成的APK重命名。任务也能更加复杂的代码,你就可以在构建过程任何细节上做修改。当你了解如何hook到Android插件之后,更是如此。定义任务任务属于一个P...

2019-06-27 09:33:11 864

原创 Gradle创建任务

Gradle创建任务理解Groovy简介类和成员变量在研究如何自定义任务之前,我们需要了解一下有关Groovy的概念。了解Groovy的工作原理可以使自定义任务变得更加容易。了解Groovy还可以帮助我们理解Gradle是如何工作的,以及为什么构建配置文件可以按照他们的方式工作。理解Groovy简介Groovy是从Java衍生出来的,运行在Java虚拟机上的敏捷语言。其目标是,不管使作为脚...

2019-06-25 13:06:04 687

原创 Android Studio Logcat移除了怎么找回来?

Logcar移除了怎么找回来?依次选择view->tool Windows->logcat,即可找回。

2019-06-21 13:51:03 5179 1

原创 Android运行测试

Android运行测试单元测试JUnit单元测试在项目中拥有好的单元测试,不仅可以保证项目的质量,还可以很容易的检测新代码是否会中断一些功能。Android Studio和Gralde的Android插件原生支持单元测试,但在使用他们之前需要做一些配置。JUnitJUnit是一个非常受欢迎的测试依赖库,从诞生到现在已超过十年。它可以很容易的编写测试,同时确保他们的可读性。注意,这些特定的单...

2019-06-20 10:44:08 877

原创 管理多模块构建

管理多模块构建解剖多模块构建Android studio不仅可以为应用和依赖库创建模块,还可以为Android Wear,Android TV和Google App Engine等创建模块。所有这些模块都可以在一个单一的项目中使用。例如,你可能想创建一个使用Google Cloud Endpoints作为后台,融合Android Wear的应用。在这种情况下,你的项目需要包含三个不同模块:一个针...

2019-06-19 09:33:48 440

原创 ERROR: Connection reset

今天更新Android Studio到3.4.1之后新建项目出现了这个错误。解决办法只需在settings中将Android Studio中的Enable embedded Maven repository选中即可,如下:

2019-06-18 19:37:27 13778 6

原创 Installation failed with message Failed to commit install session 634765663 with command cmd package

遇到这个问题可关闭instant Run,将选中去掉

2019-06-18 11:02:41 18356 7

原创 构建Variant(2)

构建Variant(2)任务源集源集合并资源和manifestvariant过滤器签名配置构建variant是构建类型和product flavor结合的结果,不论什么时候创建一个构建类型或prodect flavor,新的variant都会被创建。查看:任务Gradle的Android插件将会为你配置的每个构建variant创建任务。一个新的Android应用默认有debug和rele...

2019-06-18 09:20:33 534

原创 Android在模块化开发中如何使各个模块(module)单独运行

在模块化开发中如何使各个模块(module)单独运行在组件化还发中,为了提高开发效率,避免不必要的编译事件浪费,就不得不使单个业务模块独立运行。那如何实现呢?Android中有源集的概念,源集很好的解决了这类需求问题:有关源集的问题可自行搜索及看我之前的文章。在这里我们用到了源集重定向。步骤一:在gradle.properties文件中创建一个变量runModule,如下:#控制运行哪个...

2019-06-14 16:00:18 7004 1

原创 构建Variant

构建Variant构建类型创建构建类型源集依赖product flavor创建product flavor源集多种定制的版本构建variant当开发一个应用时,通常会有几个不同版本。最常见的情况是,你有一个手动测试用于保证质量的测试版本和一个生产版本。这些版本通常有不同的配置。举个例子:测试API和生产API的URL可以不同。除此之外,你的应用可能有一个免费版和一个有额外功能的付费版。在这种情况...

2019-06-14 09:44:00 392

原创 Gradle的几个依赖概念

几个依赖概念配置语义化版本动态化版本这里有几个依赖相关的概念理解起来非常有意思,其中之一就是配置的概念,其解释了compile关键字。配置有时候可能你不得不和一个在特定设备上工作的SDK打交道,比如特定厂商的蓝牙SDK。为了能编译该代码,你需要将SDK添加至编译类路径。你并不需要添加SDK到你的APK中,因为其早已存在于设备中,这就是所谓的依赖配置。Gradle将多个依赖添加至配置,并将命...

2019-06-13 13:21:19 671

原创 依赖管理

依赖管理依赖仓库预定义依赖仓库远程仓库依赖管理时Gradle最耀眼的特点之一。最佳情况下,你需要的仅仅时在构建文件中添加一行代码,Gradle将会从远程仓库下载依赖,确保你的项目能够使用依赖中的类。Gradle甚至可以做的更多。如果你的项目中有一个依赖,并且其有自己的依赖,那么Gradle将会处理并解决这些问题。这些依赖中的依赖,被称为传递依赖。依赖仓库当我们讨论依赖时,通常指的是外部依赖,...

2019-06-12 13:14:36 716

原创 Gradle自定义构建

Gradle自定义构建自定义构建操控manifest条目BuildConfig和资源项目范围的设置项目属性默认的任务自定义构建自定义构建构成的方式有很多种,当你在Android Studio中编写构建文件时,无论你在构建文件中自定义了什么,都应该同步该项目。当你开始添加依赖或BuildConfig变量时,同步将会变得尤为重要。在你编写settings.gradle或build.gradle时...

2019-06-11 19:29:13 534

原创 Gradle基本自定义构建

Gradle基本自定义构建理解Gradle文件settings文件顶层构建文件模块的构建文件任务入门基础任务Android任务Android Studio理解Gradle文件当用Android Studio创建一个新项目时,默认会生成三个Gradle文件。其中的两个文件settings.gradle和build.gradle位于项目的根目录。另外一个build.gradle文件则在Androi...

2019-06-11 15:30:43 474

原创 晚期(运行期)优化(2)

晚期(运行期)优化(2)在默认设置下,无论是方法调用产生的即时编译请求,还是OSR编译请求,虚拟机在代码编译还未完成之前,都仍然将按照解释方式继续执行,而编译都做则在后台的编译线程中进行。一旦达到JIT的编译条件,执行线程向虚拟机提交编码请求后将会一直等待,直到编译过程完成后再开始执行编译器输出的本地代码。那么在后台执行编译的过程中,编译器做了什么事情呢?Server Compiler和Cli...

2019-06-10 11:34:31 304

原创 晚期(运行期)优化

晚期(运行期)优化HotSpot虚拟机内的即时编译器解释器与编译器编译对象与触发条件在部分的商用虚拟机中,Java程序最初是通过解释器进行解释执行的,当虚拟机发现莫格方法或代码的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器。即时编译器并不是虚拟机...

2019-06-05 14:14:35 364

原创 早期(编译期)优化(2)

早期(编译期)优化泛型与类型擦除自动装箱,拆箱与遍历循环泛型与类型擦除泛型是JDK1.5的一项新增特性,它的本质是参数化类型的应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类,接口和方法的创建中,分别为泛型类,泛型接口和泛型方法。泛型思想早在C++语言的模板中就开始生根发芽,在Java语言处于还没邮出现泛型的版本时,只能通过Object是所有类的父类和类型强制转换两个特...

2019-06-04 13:06:14 369

原创 早期(编译期)优化

早期(编译期)优化Javac编译器解析与填充符号表从计算机程序出现的第一天起,对效率的追求就是程序天生的坚定信仰,这个过程犹如一场没有终点,永不停歇的F1方程式竞赛,程序员试车手,技术平台则是在赛道上飞驰的赛车。Java语言的“编译期”其实是一段“不确定”的操作过程,因为它可能是指一个前端编译器把*.java文件转为*.class文件的过程;也可能是指虚拟机的后端运行期编译器把字节码转换为机器...

2019-06-03 09:32:17 338

空空如也

空空如也

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

TA关注的人

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