- 博客(62)
- 资源 (20)
- 收藏
- 关注
原创 深入理解Java Annotation
引言本文将从class文件的角度来探索Annotation的相关知识,为理解JVM是如何处理Annotation打下基础.class文件中的Annotation假设有一个Annotation:@Target(ElementType.TYPE)@Retention(RetentionPolicy.SOURCE)@interface MyAnnotation { String value(
2016-03-03 15:06:15 1165
原创 Java泛型类型参数的界限
作用1. 限制类型参数的类型如要定义一个类IntegerPair来存取元素类型为Integer的对偶,此类可写成如下的形式:public class IntegerPair<T extends Integer>{ public IntegerPair() { first = null; second = null; } public IntegerPair(T first, T sec
2016-03-03 11:24:56 6255
原创 Java泛型类的继承关系
引言类型兼容的对象可以进行赋值,如可将一个 Integer 对象传给一个 Object 对象,因为 Object 是 Integer 的基类。Object someObject = new Object();Integer someInteger = new Integer(10);someObject = someInteger; // OK对于方法的参数,也可传递类型兼容的对象。如 In
2016-03-03 11:18:52 11279
原创 仿英语流利说取词放大控件的实现
1 取词放大控件英语流利说是一款非常帮的口语学习app,在app的修炼页面长按屏幕,会弹出一个放大镜,当手指移到某个单词的附近,可以看到该英文单词会被选中,效果如下图所示: 2 代码示例该控件挺有意思,于是我写了个简单的demo,点击下载,程序运行后的效果如下: 3 实现原理该控件的实现原理比较简单,下面介绍几个比较重要的类1 WordView在实习该控件的过程中,我发现看似普通的TextVie
2015-06-10 20:20:38 2950 1
原创 自己动手写编译器之Tiny语言语法分析器的实现
接着上一篇文章介绍的Tiny语言的词法分析的实现,本文将介绍Tiny语言的语法分析器的实现。1 Tiny语言的语法下图是Tiny在BNF中的文法, 文法的定义可以看出,INNY语言有以下特点: 1 程序共有5中语句:if语句,repea语句,read语句,write语法和assign语句。 2 if语句以end作为结束符号,if语句和repeat语句允许语句序列作为主体。 3 输
2015-06-10 12:46:46 22268 1
原创 EventBus for Android 源码分析
上文实例讲解EventBus for Android介绍了EventBus的基本用法,本文将介绍EventBus的实现原理。EventBus的实现主要围绕两个函数register和post,下面分别介绍之。1 register(Object subscriber)功能 注册subscriber中以onEvent开头的方法 代码:private synchronized void register
2015-06-01 21:25:11 1934
原创 实例讲解EventBus for Android
简介EventBus是一个很棒的事件订阅与发布的框架,项目地址:https://github.com/greenrobot/EventBus。作用Android各个组件间的以接口的方式进行的通信问题: 1 增加了组件间的耦合,某个组件的修改可能会引起另一个组件的修改,因此灵活度不高。 2 充斥着大量样板话的代码: 定义接口和回调 管理监听器 在各个
2015-05-30 22:09:58 5263
原创 Android开发资源文件用法小结
本文用来记录在Android开发中经常用到的一些用法 arrays.xml定义数组 例:<resources> <!-- share items --> <string-array name="app_share_items"> <item>新浪微博</item> <item>腾讯微博</item> </string-array> </
2015-05-26 10:40:58 1647
原创 Java中HashMap和SparseArray的数据结构
最近听同事说使用SparseArray代替HashMap可以提高性能,于是边对这两个类的数据结构进行简单的分析。Hashmap的数据结构 Hashmap是一个数组和链表的结合体(在数据结构称“链表散列“),如下图示:图片来源:Java的HashMap和HashTableSparseArray的数据结构 SparseArray指的是稀疏数组(Sparse
2015-05-25 19:20:05 3650 1
原创 JDK中ArrayList、HashMap和HashSet的equals方法源码分析
最近遇到个坑,在进行ArrayList和HashMap进行比较时,发现数据一样,但equals一直返回false。于是乎看了一下ArrayList和HashMap的源码,才恍然大悟。本文的代码摘自JDK 1.7.0。ArrayList的equals方法:public boolean equals(Object o) { if (o == this) return
2015-05-25 17:55:49 2640
原创 自己动手写编译器之TINY编译器词法分析
TINY是《编译原理与实践》一书中介绍的教学编程语言,该语言缺少真正程序设计语言的主要特征,但足以例证编译器的主要特征了。本文将介绍该编译器的实现过程,完整的实现代码loucomp_linux中,供编译原理初学者参考。小试牛刀:下载源码后,进入loucomp_linux, 在命令行输入$make便生成tiny程序,然后输入$tiny sample.tnytiny 将samp
2015-05-25 08:49:36 16306 1
原创 Android自定义View的用法总结
本文参考了:http://greenrobot.me/devpost/android-custom-layout/Android SDK中提供了很多UI组件,如RelativeLayout, LinearLayout等,使用自定义控件有两大优点:1、通过减少View的使用来增加UI的显示效率2、构建SDK中没有的控件原文总结了4种自定义View,分别是Compo
2015-05-23 15:55:28 5584 1
原创 XmlPullParser 解析不到END_DOCUMENT,XmlPullParserException: Unexpected token (position:TEXT
最近遇到一个坑,我在网上找了一段代码来解析XML,片段如下: int eventType = xpp.getEventType(); while (eventType != XmlPullParser.END_DOCUMENT) { if(eventType == XmlPullParser.START_DOCUMENT) {
2015-04-19 10:59:57 9468
原创 calabash-android 命令行使用
本文介绍calabash-android的命令行的使用,通过例子,熟悉calabash-android所调用的ruby api和常用控制台命令, 如query, touch, wait等。,。熟悉这些API有助于我们编写自定义feature。第一步:下载app 本文所用的测试app为黑客头条,点此下载。app中view的元素如下图所示:第二步:打开命令行,进入app的下载
2014-09-10 15:58:46 5634 1
原创 利用Calabash-Android刷广告
calabash-android是一个单元测试的工具,用来测试UI。这个特点非常适合来刷应用程序的广告。本文以一个简单的例子来教大家使用calabash-anroid来刷应用程序的广告。代码下载地址:https://github.com/bigconvience/poker_hu 在使用本文提供的例子进行测试前,请先确保安装好测试环境,可参考此文:Windows 安装Calabash-A
2014-09-08 21:40:16 5615
原创 Calabash-android 预定义steps
Calabash-android目录下的canned_steps.md中列出了一系列预定义的steps,这些steps的定义位于calabash-android\steps\目录下。本文将介绍这些steps和用法。1.断言steps:定义在assert_steps.rb中断言看到了文本:Then /^I see the text "([^\"]*)"$/Then /^I see
2014-09-08 10:33:35 3573
原创 Calabash-Android用法入门
上文介绍了如何在windows中安装calabash-android的测试环境,本文用一个实例来介绍calabash-android的基本用法。本文所用的源代位于:https://github.com/bigconvience/HackerNews下载完代码后,进入工程目录中,在命令行中输入:calabash-android gen,此命令会在工程目录下生成目录features,目
2014-09-07 23:19:50 10838 1
原创 Windows 安装Calabash-Android
calabash简介:Calabash-android是支持android的UI自动化测试框架,PC端使用了cucumber框架,通过http和json与模拟器和真机上安装的测试apk通信,测试apk调用robotium的方法来进行UI自动化测试,支持webview操作。1 安装ruby,下载地址:http://rubyinstaller.org/downloads/
2014-09-07 16:28:22 4591
原创 http协议的相关知识
由于现在的工作设计的Web开发,因此了解了一下Http协议。在阅读了这篇文章HTTP协议详解(真的很经典)后,总结了相关常用知识并列在此处以方便以后的查询。HTTP协议的主要特点可概括如下:1.支持客户/服务器模式。2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使
2014-07-02 16:34:10 3072
原创 Android 中查看内存的使用情况集常用adb命令
1. 在IDE中查看Log信息当程序运行垃圾回收的时候,会打印一条Log信息,其格式如下:D/dalvikvm: , , , GC_Reason表示导致垃圾回收的原因以及当前的回收类型,包括以下几类: GC_CONCURRENT:当堆中对象数量达到一定是触发的垃圾收集 GC_FOR_MALLOC:在内存已满的情况下分配内存,此时系统会暂停程序并回收内存
2014-06-28 10:55:05 199748 1
原创 源码分析Fragmentd的BackStack管理过程
1. Fragment基本用法为了管理Activity中的fragments,需要调用Activity中的getFragmentManager()方法。因为FragmentManager的API是在Android 3.0,也即API level 11开始引入的,所以对于之前的版本,需要使用support library v4中的FragmentActivity,并且使用getSupportFr
2014-06-13 17:25:28 10494 2
原创 AndroidManifest详解之Application(有图更好懂)
能够包含的标签: 常用的属性:android:process默认情况下,Android为每个应用程序创建一个单独的进程,所有组件运行在该进程中,这个默认进程的名字通常与该应用程序的包名相同。比如<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2014-06-11 16:34:24 34626
原创 Android屏幕density, dip等相关概念总结
1、几个术语VGA、HVGA、QVGA、WVGA、WQVGA这些术语都是指屏幕的分辨率。VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;HVGA:Half-size VGA;即:VGA的一半,分辨率为480×320;QVGA:Quarter VGA;即:VGA的四分之一,分辨率为320×240;WVGA:Wide Video
2014-06-10 14:26:19 20022 1
原创 源码讲解ActionBar的各种用法
1. Navigation Drawer许多应用程序都使用了Navigation Drawer,如网易邮箱客户端。该控件位于 android.support.v4.widget.DrawerLayout ,用法如下,点击下载源码:<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android
2014-06-06 18:17:05 11176
翻译 Android ActionBar的基本用法
本文翻译了这篇文章:Using the Android action bar (ActionBar) - Tutorial1、ActionBar的简介ActionBar位于Activity的顶部,可用来显示activity的标题、Icon、Actions和一些用于交互的View。它也可被用于应用的导航。ActionBar 是在Android 3.0(API 11)中加入到SK中的,
2014-06-06 15:44:33 112054 8
原创 Android布局文件的加载过程分析:Activity.setContentView()源码分析
大家都知道在Activity的onCreate()中调用Activity.setContent()方法可以加载布局文件以设置该Activity的显示界面。本文将从setContentView()的源码谈起,分析布局文件加载所涉及到的调用链。本文所用的源码为android-19.Step 1 、Activity.setContentView(intresId)public void s
2014-06-05 15:18:57 13730 1
原创 源码分析Android AsyncTask
Android UI操作是线程不安全的,若想在子线程红进行UI操作,需要借助Android提供的Handler。Android提供的AsyncTask其实是对Handler的封装,方便我们在子线程中更新UI元素。AsyncTask是一个泛型类,书写格式为: AsyncTask。这三个参数的用途如下:1. Params这三个参数的用途如下:1. Params在执行AsyncTas
2014-05-26 17:20:18 1525
原创 Android 编写多线程代码常用接口及官方注释
在编写多线程代码时常会接触到一些接口,这些接口是专门为多线程编程设计的。本文将总结这些常用的接口,如果大家发现其它的,希望能补充一下。1、无参数,无返回值,无异常:Runnable/** * Represents a command that can be executed. Often used to run code in a * different {@link Thread}.
2014-05-26 13:53:37 2406
原创 Bitmap基本概念及在Android4.4系统上使用BitmapFactory的注意事项
本文首先总结一下Bitmap的相关概念,然后通过一个实际的问题来分析设置BitmapFactory.options的注意事项,以减少不必要的内存占用率,避免发生OOM。一、 Bitmap的使用trick尽量不要使用setImageBitmap或setImageResource 或BitmapFactory.decodeResource来设置一张大图, 因为这些函数在完成decode后,
2014-05-26 10:23:06 26200 5
原创 代码讲解Android Scroller、VelocityTracker
在编写自定义滑动控件时常常会用到Android触摸机制和Scroller及VelocityTracker。Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制需要用到的函数进行了详细的解释,本文主要介绍两个重要的类:Scroller及VelocityTracker。利用上述知识,最后给出了一个自
2014-05-23 19:16:53 12319 4
原创 图解Android View的scrollTo(),scrollBy(),getScrollX(), getScrollY()
Android系统手机屏幕的左上角为坐标系,同时y轴方向与笛卡尔坐标系的y轴方向想反。通过提供的api如getLeft , getTop, getBottom, getRight可以获得控件在parent中的相对位置。同时,也可以获得控件在屏幕中的绝对位置,详细用法可参考android应用程序中获取view的位置当我们编写一些自定义的滑动控件时,会用到一些api如scrollTo(),scro
2014-05-23 14:59:08 83122 42
原创 Android触控基础:MotionEvent
之前的文章层从Framework层介绍了Android Touch事件即(MotionEvent)的传递机制。本文将详细介绍MotionEvent的一些成员和方法。了解了MotionEvent对开发一些特效如拖动控件或多点缩放控件有很大的作用。同时,掌握MotionEvent类也是学好android触控技术的基础。一、一些常量常见的动作常量: public static fina
2014-05-22 19:29:34 61655 4
原创 使用SourceInsight查看android中的native方法
SourceInsight真的是查看源代码的神器。只要知道了文件名,就可以快速定位到文件。最近在研究Android的touch系统,发现MotionEvent的getX()方法调用的是nativeGexAxis(),于是想看看该本地代码是如何实现的,但我不知道nativeGexAxis的实现代码在什么位置。Android中的类调用本地代码是通过类名相似或Android.mk文件定义。MotionE
2014-05-22 16:56:32 6066 1
原创 Android获取LayoutInflater对象的方法总结
在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View。本文主要目的是总结获取LayoutInflater对象的方法。1、若能获取context对象,可以有以下几种方法:LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYO
2014-05-22 14:28:26 19452
原创 Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程
上一篇文章主要讲述了Android的TouchEvent的分发过程,其中有两个重要的函数:onInterceptTouchEvent和onTouchEvent,这两个函数可被重装以完成特定的逻辑。onInterceptTouchEvent的定义为于ViewGroup中,默认返回值为false,表示不拦截TouchEvent。onTouchEvent的定义位于View中,当ViewGroup要调用o
2014-05-21 12:50:13 14565
原创 ViewSwitcher使用例子
android.widget.ViewSwitcher是ViewAnimator的子类,用于在两个Viewzhij
2014-05-18 21:39:23 23557 2
原创 Android FrameLayout的:layout_marginTop属性失效的问题
在Android3.0以下的平台上,FrameLayout内部的LinearLayout控件设置android:layout_marginTop属性是没有效果的,而
2014-05-07 20:28:10 7726
转载 Android 高手进阶之自定义View,自定义属性(带进度的圆形进度条)
转载请注明地址:http://blog.csdn.net/xiaanming/article/details/10298163很多的时候,系统自带的View满足不了我们功能的需求,那么我们就需要自己来自定义一个能满足我们需求的View,自定义View我们需要先继承View,添加类的构造方法,重写父类View的一些方法,例如onDraw,为了我们自定义的View在一个项目中能够重用,有时候我
2014-05-07 10:22:51 2231
ActionBar中Contextual action mode的使用
2014-06-06
使用ActionBar的HomeIcon进行导航
2014-06-06
动态改变ActionBar的图标
2014-06-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人