Android
小小青叶
开源代码托管:https://github.com/qingye
展开
-
Android与iOS多分辨率适配
前言:以前做feature phone的朋友,特别是MMI的,对各公司出的分辨率适配,估计都叫烦,以为做智能机开发了,算好点了,可是,现在又涉及到各分辨率(主流)的适配了。目前,Android主流分辨率有: 1. Density 为 1.5的有:480x800, 480x854, 540x960; 2. Density 为 2.0的有:1280x720,原创 2013-04-02 13:50:48 · 1568 阅读 · 0 评论 -
Android Contact分析(二):实战篇之读取联系人,模糊查询,通过汉字返回拼音
上篇文章《Android Contact分析(一):Data, RawContact, Contact之间的关系》已经把联系人表之间的关系讲明了,这篇文章就写点例子,来加深一下。一、读取联系人中所有姓名和电话号码:/** * 查询所有联系人姓名及电话号码 */private void readContacts(){ StringBuilder sb = new String原创 2013-06-05 15:39:38 · 4388 阅读 · 1 评论 -
ListView下拉刷新及上拉更多两种状态
一、前言: 很多应用都会用到ListView,当然如果是iOS就会用UITableViewController,这两个控件在不同的OS上,功能是一样的,只是有些细微的不同(iOS的UITableViewController支持静态与动态两种),不过,大多数应用都用的是动态属性,那么,这里就涉及到一个问题:刷新及加载更多内容。 目前网上流行的有两种方式:原创 2013-06-17 16:03:34 · 2762 阅读 · 0 评论 -
Android Event事件流分析
一、前言: 最近太忙了,因此好久没空来写博客了,差点让大家以为荒废了。。嘻嘻,这不,今天忙里偷个闲,来写这篇文章,帮助自己,也是帮助大家深入了解Event事件流的整个过程,涉及到的文件有:ViewRoot(Impl),ViewGroup,View,PhoneWindow.DecorView及Activity。这些文件,我会抽空将我的理解写到博客。二、事件流:2.1 Vie原创 2013-08-28 11:33:07 · 4558 阅读 · 1 评论 -
Android左右滑出菜单
现在的Android应用,只要有一个什么新的创意,过不了多久,几乎所有的应用都带这个创意。这不,咱们公司最近的一个持续性的项目,想在首页加个从左滑动出来的菜单,我查阅网上资料,并自己摸索,实现了左、右两边都能滑出菜单,并且,左、右菜单中,都可以加ListView等这类需要解决GestureDetector冲突的问题(如在首页面中,含有ListView,上下滚动时,左右不动,相反,左右滑动菜单时,上原创 2013-04-09 11:20:04 · 5201 阅读 · 13 评论 -
Android自定义属性
一、前言: 我们在开发应用时,会经常去自定义一些UI控件,而这些UI控件可能是一个小功能,或是一个复合型的大功能集合,如果是大功能集合,可能会根据不同的需求,提供给用户一些可选择属性,并完成不同的功能;这里所说的“可选择属性”,其实就是在layout.xml中,在自定义控件里,可以提供调用者来设置一些属性。二、自定义属性: 2.1 我们来看个例子:<Re原创 2013-09-02 13:49:48 · 1180 阅读 · 0 评论 -
Android自定义组合控件:UIScrollLayout(支持界面滑动及左右菜单滑动)
一、前言: 我之前很早的时候,写过一篇《左右滑出菜单》的文章: http://blog.csdn.net/qingye_love/article/details/8776650 用的是对View的LeftMargin / RightMargin进行不断的计算,并且用AsynTask来完成动画,性能不是很好,大家也在资源下载中有评论,因此,本原创 2013-09-02 15:44:22 · 2092 阅读 · 6 评论 -
Android动态加载技术初探
一、前言: 现在,已经有实力强大的公司用这个技术开发应用了,比如淘宝,大众点评,百度地图等,之所以采用这个技术,实际上,就是方便更新功能,当然,前提是新旧功能的接口一致,不然会报Not Found等错。二、原理: 2.1 JAR文件: Android使用动态加载的方法,和Java加载类似,都是加载.jar文件来实现,只不过,不同的是,这两者的虚拟机原创 2013-10-12 10:49:50 · 2271 阅读 · 0 评论 -
Android的Touch Mode
大多数Android设备都是触摸屏的,但是实际上Android设备也支持键盘操作,允许通过键盘来完成导航,点击,输入等。 当用户通过键盘(或者轨迹球)操作的时候,有必要聚焦当前接受输入的UI元素,例如,高亮(聚焦)某个按钮,让用户知道当前正在操作的UI元素是哪个。 但是,当用户使用触摸屏与设备交互的时候,始终聚焦当前UI元素就没有必要了,而且很丑陋;用户点击哪个元素,哪原创 2013-10-29 10:34:24 · 825 阅读 · 1 评论 -
Android Bundle存储数据类型
曾经被问到这样一个问题:Bundle能存哪些数据类型,不能存哪些数据类型?当时那个汗啊,因为,平常使用Bundle,要么使用基本数据类型,要么序列化自定义的Class,那到底能存哪些类型,不能存哪些呢?今天查阅了下google官方的文档(http://developer.android.com/reference/android/os/Bundle.html),罗列了以下这些是可以的:原创 2013-10-31 18:09:25 · 1921 阅读 · 0 评论 -
Android ListView的理解(一)
一、概述 这部分主要是讲解ListView在初始时,即setAdapter之后,如何将Adapter中取得的view添加到ListView中,主要涉及到几个方法: layoutChildren,fillFromTop,fillDown / fillUp,makeAndAddView,obtainView,setupChild;二、讲解 la原创 2013-10-31 16:20:07 · 3862 阅读 · 0 评论 -
Android ListView的理解(二) --- Adapter, BaseAdapter, RecycleBin
一、前述 通常,我们在使用ListView / GridView时,都需要使用Adapter,Adapter有多种,最常用的就是BaseAdapter 和 CursorAdapter了,前者是属于通用的,而后者通常会与数据库一起来使用。 1. Adapter在源码中是interface,而不是AbstractClass(http://developer.andr原创 2013-11-01 16:48:42 · 3433 阅读 · 0 评论 -
Android 后台Service下载 (一)
一、前言 原理其实大家都懂,只不过没动手实际好好的写过,项目中也没有涉及到用这块内容,所以....所以被人问及细节时,就说不清个123了,为了一改我的慵懒,因此,我写这篇文章,至少下次再被问起时,不会尴尬。 本篇文章会涉及到以下知识点: 1. Service (两种启动方法,对应的不同生命周期不同); 2. Binder;原创 2013-11-05 14:51:54 · 10069 阅读 · 5 评论 -
【精讲】Android Activity生命周期
一、前言 一直以来,自认为Activity的生命周期很简单,确实也很简单,不过,当加入了onSaveInstanceState和onRestoreInstanceState之后,以及手机处于不同的状态时会调用哪些方法,大家真的很清楚了么?比如:竖屏进入应用,此时用户旋转屏幕,然后用户再按电源键(或放置一会让屏幕熄灭),再点亮时,会调用哪些方法? 本篇会采用图文并原创 2013-11-06 14:02:37 · 2530 阅读 · 3 评论 -
Android permission用法
一、前言 通常,我们开发的应用,只需要使用一些系统定义好的资源,比如网络访问,外部文件读写,WIFI,SMS等监听权限,这些都只需要在AndroidManifest.xml中添加XXXXXX即可,但是,AndroidManifest.xml还有一个叫的tag,大家有考虑过该用法么?二、授权与使用 其实,系统的那个权限,就是用的来定义好的,那么,谁要想使用,只原创 2013-11-07 16:27:58 · 2826 阅读 · 0 评论 -
Android Contact分析(一):Data, RawContact, Contact之间的关系
一、前言: 最近任务暂时做完了,有一,两天空闲时间,因此,就想把Android Contact这块梳理下,也方便以后自己。 Android Contact的所有数据库表,都存在contacts2.db(路径: /data/data/com.android.providers.contacts/databases/contacts2.db)中,之所以叫contac原创 2013-06-05 15:15:57 · 16028 阅读 · 0 评论 -
Android类似360,QQ管家那样的悬浮窗
一、前言: 我手机从来不装这些东西,不过,有次看到同事的android手机上,有个QQ管家在桌面上浮着,同事拖动管家时,管家就变成一只鸟,桌面下方还有个弹弓,桌面顶部有只乌鸦,把管家也就是鸟拖动到弹弓那,然后,松手,鸟就飞出去。这个过程是动画过程,做的事,实际上是清楚内存。二:原理: 其实,没什么原理,用到的就是WindowManager以及WindowMa原创 2013-06-03 11:32:37 · 2365 阅读 · 0 评论 -
Android应用图标在状态栏上显示,以及显示不同的图标
一、前方在研究《Android类似360,QQ管家那样的悬浮窗》突发奇想,想把应用的图标也显示到状态栏上,类似手机QQ,而有消息来时改变状态栏上的图标显示。二、原理其实很研究完后,才发现,很简单:2.1 显示图标在状态栏上 NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIF原创 2013-06-03 11:45:23 · 5052 阅读 · 0 评论 -
Android之软引用 (SoftReference)
前言:这方面的文章,其实网上挺多的,但是都太乱,需要自己整理,或者不太适合,这篇文章,我主要是讲软引用,用在图片的下载,加载,本地缓存。由于手机的内存有限,不能将所有图标都加载到内存中,而软引用的好处在于: 1. 在内存足够时,所有的图片都在内存中; 2. 内存不足时,将释放掉当前页面不需要用到的图片内存,而只加载需要用到的,这样,就防止内存爆掉,导致手原创 2013-04-02 16:33:33 · 1090 阅读 · 0 评论 -
图片内存优化的几种方法
Android手机一次性加载图片到内存,最大不超过8MB,否则会崩溃,大家都知道,那么,我们在对超过8MB的图加载并显示,有什么办法呢?这里给出四种方法供大家参考: 1、将图片转化为缩略图再加载: BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 2;转载 2013-04-02 17:39:44 · 899 阅读 · 0 评论 -
Android AsyncTask用法
AsyncTask 是一个轻量级的线程,允许你直接将线程里完成的事情更新到UI线程中,类似于Thread + Handler的方式,只不过,它封闭起来完成了,如果你要完成一些费时复杂的工作,还是建议不要采用这个方法,取而代之的是使用Thread, ThreadPool等方式来完成。AsyncTask 有4个步骤:onPreExecute, doInBackground, onProgressU原创 2013-04-09 14:43:23 · 1485 阅读 · 1 评论 -
Android's Thread, Looper, Handler, Message, MessageQueue那些事儿
做多了Android App开发,对这些经常使用,但突然被问起来原理,虽然知道个大概,但真要拿出证据说服,还是得看看Framework代码,才能知道真正的原理,所以,这个博文,我们就直接看代码,讲点实际的东东,也方便大家在日后的分析问题中,更快找的原因。 标题也说的很清楚了,就讲这点东西,说白了,就是线程间的通信,如果做过Win32开发的朋友,应该知道,线程间的通信有几种,比如:原创 2013-03-28 09:27:03 · 797 阅读 · 0 评论 -
Android NDK用法
一、前言: 以前做过一个NDK相关的项目,通常用NDK的应用,主要是目的在于数据保密(比如私有通信协议,或安全加密数据),音视频编解码相关等。先上个流程图,让大家了解这个例子的调用关系:二、代码讲解:2.1 Java层代码:MainActivity.class代码:package com.ndk.chris.test;import android原创 2013-04-11 11:36:35 · 1475 阅读 · 0 评论 -
ListView.setOnItemClickListener有时不响应
setOnItemClickListener有时不响应,实际上是当ListView的item中含有checkbox, button等控件时,会导致setOnItemClickListener不响应,解决办法有两种:1. 将checkbox, button的focusable设置为false;2. 在getView中,设置convertView接收点击事件:convertView.setOn原创 2013-04-27 11:06:30 · 2020 阅读 · 0 评论 -
Animation 之 Interpolator 插补器理解
一、描述:我们在设计动画时,通常都会用到一些Interpolator,而它的作用就是控制动画的速度,即可以理解为:Interpolator是一个速度控制器,控制速度变化。Interpolator借口只有一个抽象方法getInterpolation(float input),而系统也自带了几个Interpolater供我们使用:1. AccelerateInterpolator:原创 2013-04-27 16:00:31 · 3266 阅读 · 0 评论 -
时间间隔: SystemClock.uptimeMillis与System.currentTimeMillis
很多情况下,不管是我们自己使用时间间隔来做一些算法,或是调用系统的API,比如动画效果,都会需要基于时间间隔来做,通常做法是:记录开始时间 startTime,然后每次回调时,获取当前时间 currentTime,计算差值 = currentTime - startTime,而获取当前时间,系统提供了两种方法:SystemClock.uptimeMillis 和 System.current原创 2013-04-28 10:16:22 · 15817 阅读 · 0 评论 -
framework 之 Animation
一、前言: Animation是OS 4.0以前就有的一个动画框架,源代码位于SDK / android / view / animation下,此目录下还有自带实现的几种动画类,和一些Interpolater(插补器),不过,它只实现了基础的动画效果,见UML图。此类是对整个View做了动画效果,但是效率较低,因此在OS4.0 之后,又添加了新的动画框架:Animator。本篇原创 2013-05-02 09:48:47 · 1206 阅读 · 0 评论 -
Java泛型理解
一、理解篇:1.1 何谓泛型:泛型本质上讲是指参数化类型。参数化类型的重要性在于,它们允许创建这样一些类、接口和方法:其所操作的数据类型被指定为一个参数(即类、接口、方法中所使用的变量类型由一些参数所指定)。我们把这样的参数叫做类型参数。(类型参数体现了参数化类型概念)1.2 泛型好处:泛型,是个老话题了,在SDK 1.5之后,就加入进来,其好处在于:泛型机制为我们提供了安全的开发原创 2013-05-02 15:03:09 · 1030 阅读 · 0 评论 -
framework 之 Animator
一、前言: 之前有篇文章讲解了Animation动画,但是自从4.0后,Google引入了新的动画框架:Animator,它与Animation的区别在于,Animator是逐帧动画,而Animation是对整个view进行了透明、位移等变化;显然,逐帧动画性能更高,Animator的源码在SDK / android / animation 下,下面来看一张UML图,描述了主要的原创 2013-05-03 17:23:38 · 1063 阅读 · 0 评论 -
设计模式 - 代理模式
顾名思义,就是表面看起来是代理做的事,实际上,是代理去找真正做事的来完成。比如,我是某公司大老板,客户需要和我签一个项目合同,但是我很忙啊,天天开会啊,应酬啊,于是,客户就找到我的代理人,代理人说,你等着,过几天给你,然后,代理人就跑来找我,我签了大名,OK,代理人就把合同给客户就完成了。因此,我与代理人都需要支持同一个功能,不然,代理人怎么知道我能做哪些情事来完成这个交易呢?1. 先原创 2013-05-24 17:00:08 · 752 阅读 · 0 评论 -
ListView中的item以动画的形式展开
1. 前言: 本篇并不用到ExpandableListView来实现二级展示,因为这个控件一是没有展开的动画效果,二是感觉性能不高,于是,就自己写了个类似于《应用汇》中管理的那个界面,只可惜它没有动画,我有。先上个图,让大家看看: 应用汇管理界面 Demo界面原创 2013-04-27 11:35:41 · 8095 阅读 · 18 评论 -
Android进程间通信 — AIDL
一、前言Android中的RPC参考了JAVA中的RMI(remote methord invocation)方案;Android中的RPC机制是为了实现进程间通信,即一个进程使用另一个进程中的远程对象,Android用AIDL(android interface defined language,Android接口定义语言)来实现,使用户可以很方便的定义一套接口,然后通过远程Service为原创 2013-05-27 11:39:43 · 1003 阅读 · 0 评论 -
Android 系统如何Kill进程当系统内存不足【原理】
前言 大家其实都或多或少知道,Android系统有自已的任务管理器,当系统内存不足时,系统需要KILL一些进程(应用),以回收一部分资源,来保证系统仍可以正常的运行,而不会崩溃,今天,就具体讲讲这个原理。进程优先级(importance hierarchy) Android系统尽量保持进程运行的更久,但是仍有时候,需要结束掉老的进程,回收内存来保证新的,或更原创 2013-11-12 16:17:05 · 1684 阅读 · 0 评论