自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

元新星的博客

记点东西

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

原创 Android JetPack ViewModel源码分析

本文从本人的《一文搞懂Android JetPack组件原理之Lifecycle、LiveData、ViewModel与源码分析技巧》拆分而来,主要采用逐类源码分析方法探寻ViewModel的原理,原文内容更加全面,欢迎收藏。组件介绍ViewModel是MVVM中的VM,被设计用来管理View依赖的数据,通常是持有LiveData和相关的处理逻辑。ViewModel管理的数据有一个特点,就是不会随着页面配置改变而销毁,但在页面销毁时则会正常跟着销毁。下面的例子中,自定义了一个ViewModel,管理u

2020-08-17 11:52:49 249

原创 Android JetPack LiveData源码分析

本文从本人的《一文搞懂Android JetPack组件原理之Lifecycle、LiveData、ViewModel与源码分析技巧》拆分而来,主要采用自顶向下源码分析方法探寻LiveData的原理,原文内容更加全面,欢迎收藏。组件介绍LiveData是一个数据持有组件,主要用来通知数据观察者数据发生了更新,它通过与LifecycleOwner组件绑定,实现可以只在页面活跃状态下发起通知,并在页面销毁时自动取消订阅,防止内存泄漏。下面的简单示例中,直接创建了一个MutableLiveData对象,他

2020-08-16 15:45:11 226

原创 Android JetPack Lifecycle源码分析

本文从本人的《一文搞懂Android JetPack组件原理之Lifecycle、LiveData、ViewModel与源码分析技巧》拆分而来,主要采用自底向上源码分析方法探寻Lifecycle的原理,原文内容更加全面,欢迎收藏。组件介绍Lifecycle可以方便我们处理Activity和Fragment的生命周期,可以将一些逻辑更加内聚和解耦,比如把资源的释放操作从Activity的回调代码中解耦出来,放到资源管理类中自动进行。该组件是后两个组件的基石,理解它的原理也有助于我们理解LiveData是如

2020-08-14 11:16:19 390

原创 Android JetPack源码分析技巧

本文从《一文搞懂Android JetPack组件原理之Lifecycle、LiveData、ViewModel与源码分析技巧》拆分而来,原文内容更加全面,欢迎收藏。Android Jetpack是一个比较新的开源库,包含了丰富的单元测试用例和Demo工程,甚至可以从提交记录中看到官方的开发流程和bug修复记录。这些信息也一定程度上可以帮助我们分析JetPack的原理,在这里就和大家分享几个技巧心得,希望帮助到大家。源码下载官方地址: https://android.googlesource.com

2020-08-13 15:18:09 586 2

原创 AsyncTask源码分析

分析从调用的 execute(Params… params) 方法开始,顺序说明了主要方法和变量。最后还用心总结了分析源码的心得。

2017-04-07 17:08:11 255

原创 重构技术在Android Studio中的应用

内容总结自《重构—改善既有代码的设计》读书笔记主要说明下Android Studio快捷操作支持的在这本书重构列表里的部分重构技术

2017-04-07 17:01:37 1016

原创 java中的多线程——线程并发库

jdk5.0开始提供了线程并发库,可以针对多线程编程很方便地做一起操作,实现有意思的功能。这就像世上出了一款专治某个疑难杂症的特效药,而作为医生,就是第一时间知道对这种病要使用这种药,去解决之前不容易的治的病。

2015-11-05 00:15:09 636

原创 java中的多线程——线程创建方式、线程互斥和线程间通信

线程创建方式1.使用 Thread(Runnable target)这个构造方法创建Thread对象,传入一个实现Runnable接口的对象。实现Runnable接口要实现Run方法,所以这种方法创建的线程运行时,会执行这个Runnable接口上的Run方法。2.定义Thread子类,重写run方法,当这个线程执行时,会执行已重写的run方法。面试题:以下代码的输出语句是publi

2015-11-03 20:45:26 634

原创 java中的内存泄漏

内存泄漏是指申请的内存没有及时的释放,这种情况一旦多了,使用的内存超出了可用内存数,就会发出内存溢出。也就是说内存泄漏可导致内存溢出。面试时,一般会被问到java中是否存在内存泄漏。Java中是存在内存泄漏的情况的,这主要是和对象的引用有关。对于以上4种或更多地场景,我们要特别注意对象的引用,在不需要一些对象时,要及时通过代码修改这些对象的引用为非强可及的才行。

2015-11-03 11:15:39 664

原创 java中的HashSet和TreeSet的区别,以及HashSet导致的内存泄漏详解

Set集合中的元素是无序的,不可重复的。这个接口下有两个常用集合的实现,HashSet和TreeSet。HashSetHashSet底层用的是哈希表,它把对象根据其哈希值存放到对应的区域里。由于这种特性,两个在不同区域的对象会被认为不相同的。所以如果对象要存放到Hash集合里面,则需要重写对象的hashCode方法,让相等的对象的hashCode的值也相等。

2015-10-30 17:43:53 12616 1

原创 java中的枚举介绍与简单应用

枚举作为jdk5.0出的新特性,用来处理有限、稳定的数据集是非常方便地,比如一周、四季这样的。如此简单轻巧,又体现出不一样的编程思想,何乐而不为呢?

2015-10-30 15:20:28 446

转载 overload与override的区别

原文地址:http://www.cnblogs.com/whgw/archive/2011/10/01/2197083.htmloverride(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 

2015-10-30 13:15:46 383

原创 Java中的享元(flyweight)设计模式

问题:如果利用java5自动装配特性定义两个对象:Integer i1 = 13;Integer i2 = 13;那么,这两个对象是不是同一个对象呢?System.out.print(i1==i2);结果是true,还是false?如果这样定义:Integer i1 = 137;Integer i2 = 137;结果又是什么?答案

2015-10-23 11:06:12 355

原创 代码重构随笔

为什么要进行重构呢?这是因为当时为了快速实现功能,写代码时比较匆忙,最后导致代码结构混乱,类间的依赖关系不明确。为了提高代码可读性和程序的扩展、维护性,需要对代码进行重构。写的代码可读性差可以是由于对各种设计模式不熟悉造成的。如果在设计功能时熟练地应用合适的设计模式、做好软件的架构,就能减少重构的工作。另外,写代码时随手写注释可以提高重构的效率。重构时应思考各个

2015-01-12 11:53:54 494

原创 java客户端数据发送到服务器(POST请求)总结

java客户端数据发送到服务器(POST请求)总结1.如果不设置Content-type,默认是:application/x-www-form-urlencoded。2.GET请求的参数与对应的值位于请求行中,并附加在URL后面,通过“?”分隔开来。POST请求的数据在请求报文里。3.两种请求方式的数据都以“key1=value1&key2=value”的格式。4.Post用URLConnection里的OutputStream对象写入数据,服务端用HttpServletRequest的getPa

2015-01-08 16:33:21 22673 2

转载 mvc分层软件设计的优点及缺点

今天在复习分层开发这个课的一些知识点,在网上看到了有关分层设计的优缺点的总结,个人感觉挺好,下面转载保存一下原文地址:http://wenda.tianya.cn/question/4b12e2616d254447优点:分层式结构究竟其优势何在?Martin Fowler在《Patterns of Enterprise Application Architecture》一书中给出了

2015-01-02 14:01:59 3368

原创 vaadin之Servlet 与 URL 模式的映射

vaadin7.0创建新项目时,默认是这样配置的 @WebServlet(value = "/*", asyncSupported = true)碰到的问题是:这里的value无法修改,否则运行就报错Failed to load the bootstrap javascript: ./VAADIN/vaadinBootstrap.js又新建了一个试了一下,运行时不报

2014-12-30 22:54:32 2561

原创 vaadin 显示table组件的全部项目

在一个容器(layout)里有一个table组件,想全部显示这个组件而不出现滚动条,由于table组件的行是动态添加的,所以不能使用固定宽高的方式。查看了有关文档,发现了VerticalLayout和HorizontalLayout可以自动适合它内部组件的大小,只要它们的高度和宽度不指定就行了。然后按这个方法弄过之后,table组件显示不出来了,再找文档,发现一条警告:如果

2014-12-29 21:26:32 2214

原创 vaadin控件table的使用之隐藏表格头

今天试着弄了下table控件,想隐藏表格头,苦苦找不到方法。最后找到官方的Vaadin之书,感觉很不错,而且还有中译版的,可以作为学习Vaadin的资源。链接:https://vaadin.com/book/zh/-/page/preface.html在Vaadin之书的5.21节可以找到table的介绍。找到5.21.4表格头和表格脚,可以看到里面有写隐藏表格头的方法。如下:

2014-12-28 22:29:04 1495

原创 新建Vaadin web项目时的问题

最近学着搞Vaadin,碰到了不少问题,下面总结几个。新建Vaadin 7.0项目时出现以下错误An internal error occurred during: "IvyDE resolve".org.eclipse.osgi.internal.framework.EquinoxConfiguration$1 cannot be cast to java.lang.String

2014-12-25 23:04:53 1332

原创 使用json-lib把JSON对象转换成java bean list的例子

有这样一个JSON对象[{\"userkey\":\"\",\"xingming\":\"name\",\"xingbie\":0,\"chushengriq\":\"\",\"height\":\"\",\"weight\":\"\"},{\"userkey\":\"\",\"xingming\":\"name2\",\"xingbie\":1,\"chushengriq\":\"\",

2014-12-25 17:23:40 807

原创 在OS X上部署Java web开发环境

本人第一次接触OS X系统,学着部署了一下Java web开发环境。下面总结下过程。一、安装JavaOS X已经不自带Java了,需要自己安装。这里总结两个下载方法。方法一:如果只是需要1.6版本,推荐下载地址:http://support.apple.com/kb/DL1572?viewlocale=zh_CN这是苹果官方支持的,兼容性最好。方法二:打

2014-12-24 23:37:56 1274

原创 Android 自用双缓冲小例子:采用双缓冲实现画图板

所谓的双缓冲技术其实是,当程序需要在指定View上进行绘制时,并不直接绘制到该View组件上,而是先绘制到一个内存中的Bitmap图片(这就是缓冲)上,等到内存中的Bitmap绘制好之后,再一次性地将Bitmap绘制到View组件上。自定义View代码如下。import android.content.Context;import android.graphics.Bitmap;imp

2013-05-09 16:24:06 781

原创 Android绘图基础:Canvas、Paint、Path的简单使用

Android绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法即可。Canvas提供了一些方法绘制各种图形,Paint代表了Canvas上的画笔,主要用于设置绘制风格,Path代表任意多条直线连接而成的任意图形,Canvas可以根据Path进行绘制出任意的形状。下面的小例子示范了一些方法的使用。Activity:public class Mai

2013-05-06 17:02:25 817

原创 个人作品—个人计划管理应用todolist—演示视频

todolist演示视频点击这里打开

2013-04-25 21:38:54 1027 1

原创 BroadcastReceiver实践:定义多个同行为闹钟(AlarmManager)服务

出现问题:如何设定很多个的闹钟(AlarmManager)启动同一个行为(Action),而又互不影响呢?如果PendingIntent的flag用的FLAG_UPDATE_CURRENT,那一个新的闹钟任务不是会把旧的待响的闹钟任务更新掉吗?关于PendingIntent的flag设置请看这里解决思路:设定闹钟的服务先把所有要设定的闹钟信息,按时间的先后存储起来。并先设定时间最近的一

2013-04-21 21:19:03 1532 2

转载 String,StringBuffer,StringBuilder区别与效率

原文地址:String in Java今天看到一篇文章,觉得很有用,特意记下来。 总结: 区别: 1.String是不可变的,原因是其用于存储字符序列的char[] value数组被用final修饰了。 2.StringBuffer的char[] value数组初始化长度是参数长度+16,所以可以使用其append()方法追加字符串。 3.StringBuilder与Str

2013-04-19 20:50:55 616

转载 Android PendingIntent的Flag设置

原文地址:Android PendingIntent的一些小迷惑A PendingIntent itself is simply a reference to a token maintained by the system describing the original data used to retrieve it. This means that, even i

2013-04-19 20:45:02 1699

原创 android 本地SharedPreferences存储到使用sqlite数据库存储的转换

转载请注明出处,谢谢!自己做的手机小应用以前用的是SharedPreferences存储的数据。现在需要换成用sqlite数据库存储,那就要重构代码了。以下探讨部分代码的重构:以前的代码:List data;SharedPreferences spf;Editor editor;editor = spf.edit();data = getData();

2013-04-12 13:08:47 988

原创 String,StringBuffer,StringBuilder区别与效率

原文地址:[url=http://www.iteye.com/topic/522167]String in Java[/url]今天看到一篇文章,觉得很有用,特意记下来。[size=x-large]总结:[/size][size=large]区别:1.String是不可变的,原因是其用于存储字符序列的char[] value数组被用final修饰了。2.StringBuffer...

2012-12-04 10:12:12 125

原创 (转)程序员进步的本质

[size=large]今天逛群组时,看到这样一段话,觉得挺有道理,摘抄一下。 :) [/size][quote][size=large]编程相关的有什么: 1.抽象:观察收集对象信息的能力,分析对象信息的能力,提取出抽象模型的能力。反馈改进的能力。 2.数学模型:抽象的抽象。帮助你对抽象模型进行变性,推理,使用,并且大量的已有数学抽象模型供你使用。 3.计算机基础知识:实现的...

2012-11-17 11:21:18 98

原创 用java将二进制转换ascii码

[size=large]今天玩程序员闯关游戏最后一关,碰到个难题,一大串二进制数要转换成ascii码。最后想到ASCII码对应的数是十进制数的,可以先把二进制转换成十进制,再强制转换成char类型就好了。于是用到Integer类中的一个方法:static int parseInt(String s, int radix) 使用第二个参数指定的基数,将字符串参数解...

2012-11-13 15:13:44 1744

Android Studio Setting文件

Android Studio Setting,包含code style,keymap,插件等设置。一键导入,终身受用。

2018-08-07

空空如也

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

TA关注的人

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