Cursor和CursorLoader中的观察者模式

在我之前的一篇文章:节流装载器(Throttle Loaders)的使用示例中简单的提了下CursorCursorLoader中所应用的观察者模式,这篇文章将从源码角度详细的分析一下这个观察者模式的具体实现。

前言

首先我们要搞清楚这里为什么使用观察者模式,它被用来完成什么工作。

之前我在介绍装载器(Loaders)时,说到它有一个很重要的特性:监视数据源的改变,并在数据源发生变化时传送新的结果;参考Android装载器(Loaders)框架简介

装载器要实现监视数据源,并在数据源的数据发生改变时装载最新的数据,必须提供一种源/监听器(Source/Listener)的机制;这里就是应用的这种观察者模式;关于观察者模式的详细介绍,可以参考我的另一篇文章:Java观察者模式(Observer)

Android装载器(Loaders)使用示例

关于装载器的简介,可以参考我的另外一篇文章:Android装载器(Loaders)框架简介

本文主要围绕Android官方的ApiDemo中的LoaderThrottle.java从下到上展开一个完整的示例;包括实现一个简单的SQLite数据库保存数据,以及提供一个基于SQLite数据库的ContentProvider的实现,节流装载器的基本使用,以及利用AsyncTask模拟数据源发生变化来测试装载器的行为。

简析Android软键盘弹出时窗口上移的问题

昨天在设计一个页面,大概框图如下: sample

Activity 测试系列教程

今天是2014国庆节,天气很好,屌丝没有回家,一个人呆在宿舍里面。昨晚和朋友出去喝酒,喝了四瓶,第一次喝到吐了……今天一天都有点萎>_<真坑爹啊,头痛写不了代码就写写博客吧……不知道你们的国庆节是怎么过的。

这次的Activity测试系列教程结合实例完整地介绍了Android测试中的一些知识点,并使用最新的Android Studio新建测试用例,Eclipse读者可以参考英文原文,大部分内容是翻译自Android官网文档,水平有限,如有问题欢迎与我交流讨论。

目录:

  1. 建立测试环境——教你在Android Studio下建立测试环境
  2. 创建和运行一个测试用例——教你创建一个Activity测试用例,并用Instrumentation测试器来执行
  3. 测试UI组件——教你测试Activity中特定UI组件
  4. 创建单元测试——教你在封闭状态下对Activity进行测试
  5. 创建功能测试——教你创建一个功能性测试,并用来测试多个Activity间的交互

三招优化Android布局

Layout是Android应用中直接影响用户体验的关键部分,如果实现得不好,你的用户界面可能会出现卡顿。Android SDK提供了帮助你找到Layout性能瓶颈的工具,本节将会介绍如何使用这些工具,消耗小量的内存来实现流畅的UI。

优化Layout的层级

一个常见的误区是,用最基础的Layout结构可以使布局性能提高。然而,你的程序的每个组件和Layout都需要初始化、布置位置和绘制。例如,嵌套的LinearLayout可能会使得视图的层级结构很深。此外,嵌套使用了layout_weight参数的 LinearLayout的计算量会尤其大,因为每个子元素都需要被测量两次。这对需要多次重复inflate的Layout尤其需要注意,比如使用ListViewGridView时。

本节中,你将学习使用Hierarchy Viewer(层级浏览器)来检查和优化Layout。

Handler造成的Context泄漏及解决方法

Activity中定义一个非静态的内部Handler类时,Lint会报一个内存泄漏的警告;这是因为在ADT 20中Lint增加了一个检查项目,即确保Handler内部类不包含对外部类的隐式引用。在Java中,非静态内部类(包括匿名内部类)会持有一个隐式的外部类引用,而静态内部类不会引用外部类对象。 内存泄漏会造成很多问题,导致手机上面的硬件资源被毫无意义的浪费,所以我查了些资料,简单分析了下Handler造成内存泄漏的原因,以及如何避免发生这样的内存泄漏。

考虑如下代码:

public class MainActivity extends Activity {
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    };
}

Android Studio常用快捷键整理

这篇文章记录了一些Android Studio中常用的快捷键,我会根据自己的使用情况,不定期做一些修改。

频繁使用

Delete Line(删除行): Ctrl + Y
Select Word at Caret(选中一段代码,可连按): Ctrl + W
Paramter Info(方法参数提示): Ctrl + P
Rename...(重命名): Shift + F6
Quick Documentation(显示注释文档): Ctrl + Q

Android代码和JavaScript互相调用

最近在做一个App中需要通过WebView加载一个使用JavaScript的网页,并且要实现相互之间的调用。

首先如果如果你的WebView要加载使用JavaScript的网页,必须启用WebView对JavaScript的支持,一旦启用之后你就可以通过接口来实现本地代码和JavaScript代码的互相调用。

启用JavaScript支持

WebView默认是禁用JavaScript的,你可以通过附加到WebView的设置类WebSettings开启它。 通过getSettings()函数获取WebViewWebSettings对象,然后你可以调用setJavaScriptEnabled()函数开启对JavaScript的支持。