自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

碎格子

记录一些平时容易忘的或者学习的新技能

  • 博客(28)
  • 收藏
  • 关注

原创 享元模式flyweight

享元模式属于结构型模式。享元模式是池技术的重要实现方式,它可以减少重复对象的创建,使用缓存来共享对象,从而降低内存的使用。细粒度的对象其状态可以分为两种:内部状态和外部状态。

2023-02-14 14:48:11 451

原创 源码分析ImageView中ScaleType设置fitCenter和centerInside的区别

在设置ImageView的scaleType时,有时常常搞不清fitCenter和centerInside的区别,网上资料说的也很模糊,今天就从底层源码看看这俩类型的区别。查看ImageView的代码,发现有这样的一个ScaleType数组,里面存放了我们所有的可设置的type枚举。

2023-02-08 11:26:03 1452

原创 SparseArray原理和使用

我们知道,数组的增删时间复杂度都比较高,因为需要移动数组,而SparseArray在删除的时候做了一个特殊的处理,它并没有进行数组移动,而是给删除的数据位标记了一个DELETED,DELETED是我们创建SparseArray时创建的一个Object对象。对于valueAt(int),将按升序返回与键对应的值。SparseArray不适合用来存放大量数据,下面的例子可以看出,当数据一大了之后,二分查找的效率是低于红黑树的,所以当要存放量大的数据时,SparseArray的效率是不如HashMap。

2023-02-06 18:45:48 735

原创 Java代理模式

动态代理在运行后会在内存中创建一个实现了接口的代理类,通过调用代理类的实现方法,回调到InvocationHandler接口的invoke方法,通过反射拿到实现类的方法,并进行调用。代理模式(结构型设计模式)通过代理类去访问实现类中的方法,使用场景比如:已有接口和实现类的情况下,想要在已实现的方法基础上扩展更多的功能的场景。实体类TV不变,接口增加维修方法,如果是静态代理,接口新增方法,则对应的实现类和代理类都要实现这个方法,而动态代理则在。代理类,也需要实现接口,调用实现类的方法,本身不处理业务。

2023-01-26 09:30:00 974

原创 HashMap的使用:put、remove和get方法原理

table是一组头结点数组n赋值为数组长度i = (n - 1) & hash按位与求出该key所在头结点数组的位置(哈希碰撞)p为找到的头结点e为最终找到的key对应的节点TREEIFY_THRESHOLD为8int n, i;//n为数组长度if ((p = tab[i = (n - 1) & hash]) == null) //(n - 1) & hash按位与求出该key所在头结点数组的位置//没有找到时,链表新创建一个节点else {K k;e = p;

2023-01-20 10:40:15 1963 2

原创 Android 使用类加载器原理实现热修复

本篇热修复的原理是通过类加载器加载修复好的class文件来实现。源码分析项目在编译的时候会将java文件翻译成class文件,而class类在程序安装的时候会打包成dex文件,Android 通过dalvik虚拟机运行dex文件,从而实现类的加载。所以我们先来看看这里会用到两个类加载器:DexClassLoader和PathClassLoader。public class DexClassLoade

2017-11-24 19:03:49 417 1

原创 Android Room牛刀小试

Room在SQLite之上提供了一个抽象层来访问数据库,可以在充分利用SQLite强大功能的同时对数据库进行流畅的访问。

2017-11-13 16:19:52 3341 2

原创 Android将Excel表数据导入SQLite数据库

前两天接了个私活,需求方给了一个Excel表格,需要使用到里面的7000+条数据进行查询,最开始以为7000条一条条加入数据库也还好,以下是其中一部分数据:但当我添加了20多条的时候突然发现这样的方式太蠢了,所以想着既然文件可以读取,那是否可以将Excel文件里的数据读取导入数据库呢?上网查了下资料,发现确实是可行的。准备工作我们要将Excel导入SQLite数据库,需要使用JXL API(Java

2017-03-22 23:19:37 6936 3

原创 Android 使用bintray将本地库上传到JCenter做maven依赖库

建项目及制作library包部分1.在github上新建一个仓库2.将仓库clone下来3.新建项目:项目文件夹选择我们克隆下来的文件夹4.File->New->New Module选择library成功后的Project 结构在新创建的库中编写代码,并在app模块的gradle下添加下面代码引入库:compile project(':yourmodulename') //冒号后是你的新module

2017-03-03 16:25:08 1859 3

原创 Android使用BottomSheetBehavior 和 BottomSheetDialog实现底部弹窗

BottomSheetBehavior 和 BottomSheetDialog都是design包里的。这两种配合使用可以实现底部弹窗效果。BottomSheetDialog使用方法和正常的弹框是一样的,他的内部是通过BottomSheetBehavior来控制弹框的收起和弹出等状态。BottomSheetBehavior的状态: /** * The bottom sheet is d

2016-12-15 14:54:53 11489 4

原创 探索Android 7.1 app快捷方式(App Shortcuts)

Google已经发布了Android Nougat 7.1(API 25) 版本,但是这个不是一个小的发布版,事实上它绑定了一些有趣的功能在底层。其中一个附加功能就是App快捷方式(App shortcut)

2016-11-22 17:07:25 1998 1

翻译 两年Android开发教会我的那些事(一)

我还记得在2014年的时候,我决定开始进行Android开发,这是我一生中做的最正确的决定之一。到现在两年半的时间里,我有机会学习或改掉很多有关Android方面的事情。当我最开始学习的时候,我没有一个导师或者一个人可以指导我去做正确事。我犯了很多错误直至后来浪费了大量的时间去整顿这些东西。后来,在一年半后,我有机会和一些有天赋有经验的Android开发者一起工作,他们指导我,帮助我用更好的方式去做

2016-09-19 13:57:03 593

翻译 android开发实用工具

这几年我发现了很多很有用的android开发工具。我一直使用这些工具去编译app。我推荐你关注这些工具,并且看看他们是否适合你的工具链。Library methods countAndroid libraries很庞大,但是他们带来了开销成本。使用这个工具去避免可怕的65K方法限制DEX文件格式化。StethoStetho是一个facebook开发的android 应用调试桥。他集成在Chrome桌

2016-09-12 23:30:57 509 1

原创 AlertDialog.Builder+SpannableStringBuilder自定义单选框

在项目开发的时候,产品汪希望我们做出这种样式的dialog,要做出单选Dialog很简单,网上例子一搜一大把。而我们常用的AlertDialog.Builder也有实现这样的方法:setSingleChoiceItems(ListAdapter adapter, int checkedItem, final OnClickListener)我们就用这个方法弹一个单选框看看:AlertDialog.B

2016-09-06 00:29:07 2058 2

原创 EventBus的初步接触

在项目开发过程中,我们对onActivityForResult一定不陌生,通常我们希望从当前Activity/Fragment跳到另一个Activity/Fragment去进行一些事件的处理,处理完后将结果发送给第一个Activity/Fragment,这会儿我们就可以重写onActivityForResult,可是在大量的实践下,发现如果如果只有一个Activity进行结果处理,一个Activit

2016-08-28 23:26:11 504

原创 我踩到的关于Fragment 状态的保存和恢复的坑

在进行项目开发的时候遇到了一个奇怪的坑,在Activity和Fragment传递对象的时候已经对对象进行了判空处理,但是在Fabric统计上还是出现了“NullPointException”

2016-08-14 23:44:34 8662 1

原创 自定义无内存泄漏的Handler内部类

最近做项目有很多需要在子线程中进行耗时操作,因为操作也比较简单,也就是单纯的发送网络请求然后处理回调更新UI,所以选择了Thread+Runnable+Handler的组合。 然后有了最初的代码: 代码片段1:SGAddressFragment.javaHandler handler;public void onActivityCreated(@Nullable Bundle savedIns

2016-07-13 00:08:41 1420

原创 有关内部类不得不说的

在我的Android开发常见的Activity中内存泄漏及解决办法这篇博客里有谈到内部类导致的内存泄漏。代码如下:private static Object inner;void createInnerClass() { class InnerClass { } inner = new InnerClass();}View icButton = findViewById(

2016-07-01 11:30:39 717

原创 多线程学习之--真的不能在子线程里更新UI吗?

在我们学习多线程的路上,都会听到这样一句话: 不能在子线程里更新UI,UI更新必须在UI线程中why?为什么不能在子线程中更新UI?如果在子线程中更新UI会怎样? 为了模拟在子线程中更新UI的场景,简单地写了几行代码: @Override protected void onCreate(Bundle savedInstanceState) { super.onC

2016-06-28 23:20:13 3336 2

原创 SharedPreferences 的commit和apply分析

之前在做项目开发的时候曾经遇到过一个坑,我们的业务需求是点击相应的国家图标进行国家切换包含汇率、url等的切换,所以当时我们考虑的是切换的时候用SharedPreferences来对存储当前的国家代码,所以我们有了以下的代码:SharedPreferences.Editor editor = PreferenceUtil.getDefaultPreference(DgApplication.getI

2016-06-18 17:17:49 20483 4

翻译 使用Espresso Test Recorder编写Android测试

本文是翻译的Writing Android Tests with Espresso Test Recorder这篇文章,楼主水平有限,如果有翻译有误的地方还望各位批评指正Android测试工具在近两年有了显著的提升。Instrumentation和单元测试是当前流行的Android测试包中比较简单的。对于在自己的app中如何整合和使用这些工具,如何编写自己的测试,google上都有大量的源码和例子

2016-06-14 12:05:35 2553

原创 Android开发常见的Activity中内存泄漏及解决办法

上一篇文章楼主提到由Context引发的内存泄漏,在这一篇文章里,我们来谈谈Android开发中常见的Activity内存泄漏及解决办法。本文将会以“为什么”“怎么解决”的方式来介绍这几种内存泄漏。 在开篇之前,先来了解一下什么是内存泄漏。什么是内存泄漏? 内存泄漏是当程序不再使用到的内存时,释放内存失败而产生了无用的内存消耗。内存泄漏并不是指物理上的内存消失,这里的内存泄漏是值由程序分配的内

2016-06-12 23:52:34 18437 3

原创 Android开发中的Context

作为一个Android开发者,不知道你有没有发现,在我们的代码中有个很厉害的角儿–Context,这个角色上能启动Service、Activity,下能Get各种应用资源,所以这个Context到底是个什么“人物”?为什么他拥有这么大的权力能支配四大组件呢?Context是什么?Context翻译为:语境; 上下文; 背景; 环境,而我们在开发中说的这个“上下文”到底是什么意思呢?在开发中,我们可以

2016-06-06 14:56:29 1138

原创 volley+Express实现简单的客户端服务器通信

最近在补一些网络的东西,所以闲来无聊,就用Android的Volley和Node.js的Express简单的实现客户端和服务器的通信。 由于楼主时间比较紧,在这里就简单的说一下实现步骤,等有时间楼主再补充详细的~ 首先我们来看看如何用Express搭建服务器: Express 是一种保持最低程度规模的灵活 Node.js Web 应用程序框架,为 Web 和移动应用程序提供一组强大的功能。

2016-05-30 00:15:40 1011

翻译 如何“优雅”地给你的类命名

本文是翻译NOVODA上的一篇博客“This one simple change for better class naming will blow your mind”楼主读了该大神的博客后深受启发,故翻译了此文~楼主捉急的英文水平还望各位看官海涵~翻译不足之处还请各位多多指出~原文链接在文章末尾,感兴趣的童鞋可以看看当我们在对一个类进行命名的时候,通常需要经过各方面的考虑,而MVP模式的命名就

2016-05-22 20:23:40 2937

原创 我在Adapter中使用holder时踩到的坑

我在Adapter中使用holder时踩到的坑说到这个坑,一切都源于万恶的用户需求...

2016-05-16 00:42:37 1040

原创 Android使用SpannableString进行字符串的分段处理

Android使用SpannableString进行字符串的分段处理最近进行Android项目开发的时候遇到了一个情景: 这是一个单选按钮后面跟一句选项描述。大家能看到,这段文字前面部分是黑色文字,但后面却跟着蓝色高亮的价格,换作你会怎么来实现这样的效果呢?可能跟我一样看到这个图想到的实现方法是(RadioButton+TextView),RadioButton实现前面单选按钮和紧跟着的黑色文

2015-09-07 23:54:15 4698 1

原创 Android使用Serializable实现序列化传输对象

最近在做一个基于Socket通信项目,在实现客户端与服务器进行对象传输时使用到了Serializable接口对传输对象进行序列化,下面将和大家分享一下我的开发实例,欢迎各位交流探讨,不足之处希望各位多多指出。首先谈谈什么是序列化,序列化(Serialization)是将对象的状态信息转换成可存储可传输的形式的这个过程,若要实现对象的传输,应该先将对象进行序列化。在Andro

2015-04-26 08:57:24 2555 1

空空如也

空空如也

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

TA关注的人

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