单例模式是应用非常广泛,使用非常简单的一种设计模式,单例模式要求单例类的对象必须保证只有一个实例的存在,例如在 Android 中一般情况下只有一个 Application 实例。然而虽然单例模式理解起来非常简单,但是要写出一个万无一失的单例模式还是不容易的,因此这篇博客将首先介绍单例模式的各种写法,接下来会介绍 Android 源码中的单例模式的应用。
面向对象的六大原则
面向对象思想是软件工程史上的一个里程碑式的编程思想,然而面向对象编程思想的应用却不是很简单,如果不能正确理解面向对象编程思想,却使用面向对象编程语言编程那将是一场灾难,为了避免写出烂代码,我们必须学习设计模式,而面向对象的六大原则将指导我们编写出可读性高、扩展性好的面向对象代码,这篇文章将介绍面向对象的六大原则。
Android 性能优化
Android 作为一种移动设备,内存资源和计算资源都受到限制,如果对内存使用不当,可能出现内存泄漏的问题,过多的使用内存,则有可能出现内存溢出,即OOM问题。而对 CPU 资源的不恰当使用则有可能出现 ANR 问题,针对这些问题,对于 Android 开发人员就提出了更高的挑战。本文将会介绍一下性能优化方案,包括:布局优化、绘制优化、内存泄漏优化、响应速度优化、 ListView 优化、 Bitmap 优化、线程优化等。
Android 动画分析
Android 的动画分为三种:View 动画、帧动画和属性动画,这篇文章主要讲解 View 动画和属性动画的使用方法、插值器和估值器的原理,最后会介绍使用动画的一些注意事项。
不为人知的 RemoteViews
可能标题党了,应该是我们在日常开发中很少会接触到它,这篇文章将首先介绍一下 RemoteViews 在通知栏和桌面小部件的的应用,然后会分析 RemoteViews 的内部机制。那么什么是 RemoteViews 呢? RemoteViews 表示的是一个 View 的结构,它的功能就是用来跨进程更新界面,主要的应用就是桌面小组件和通知栏。
RemoteViews 在实际开发中主要应用在通知栏和桌面小组件。通知栏主要通过 NotificationManager 的 notify 方法实现,它既可以使用默认效果也可以自定义布局。桌面小部件则通过 AppWidgetProvider 实现, Approvider 本质上是一个广播。那么为什么它们更新界面都需要 RemoteViews 呢?那是因为二者的界面都运行在其他进程中(SystemServer进程)。因此他们的界面更新都需要 RemoteViews 。
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick Start
Create a new post
1 | $ hexo new "My New Post" |
More info: Writing
Run server
1 | $ hexo server |
More info: Server
Generate static files
1 | $ hexo generate |
More info: Generating
Deploy to remote sites
1 | $ hexo deploy |
More info: Deployment
Android Studio AIDL 实战
AIDL是Android Interface Definition Language 的缩写,即Android 接口定义语言。那么AIDL到底是干什么用的呢?简单的说AIDL就是用来进行进程间通信的 ,可是Android已经有了Messenger、ContentProvider、Socket等进程间通信方式,那么我们为什么还需要AIDL呢?以及我们什么时候应该使用AIDL呢? 其实这 两个问题的答案可以在Android官方文档中找到,在Android的官方文档中有下面的描述:
AsyncTask源码解析
AsyncTask 是Google官方提供的供开发者简易使用UI线程的一种解决方案。通过使用AsyncTask,我们可以在后台进行数据操作,然后将结果发布到UI线程,而且
免了使用Thread和Handler。这篇文章将分析AsyncTask的源码,以探寻其实现原理。
LruCache源码解析
LruCache是Android在3.1提供的一个最近最少使用数据缓存算法工具类,本文将梳理一下LruCache的源码。首先我们看一下Android官方文档是怎么样描述LruCache的。
A cache that holds strong references to a limited number of values. Each time a value is accessed, it is moved to the head of a queue. When a value is added to a full cache, the value at the end of that queue is evicted and may become eligible for garbage collection.
利用责任链模式实现加载不同来源的数据
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。
责任链模式是一种对象的行为模式,在责任链模式中每个对象及其下家的引用而形成一条链,请求在这个链式传递,直到链上的某个对象处理此请求。责任链模式非常适合移动端先从内存中加载数据,如果内存中没有则去硬盘中加载,最后再通过网络加载数据,这篇文章将介绍利用责任链模式来解决这个问题。