1.splash的实现
实现splash启动画面,最简单都是使用窗口主题(Theme),直接设置背景图片。
- splash的图层叠加,可以使用<layer_list>标签,每个图像用item标签。(res/drawable/xxx.xml)
- 创建一个style,来定义启动画面都背景。<style xxxx parent="android.:Theme"> ,通过item指定<item name="android:windowBackground">@drawable/xxx.xml</item>
- AndroidManist.xml中为Activity指定style
Note:之前我的实现一直都是实现一个splash的activity,进行初始化后,再跳转到main activity
2.内容的快速切换
- 创建一个FrameLayout,里面定义各种widget,内容切换时,设置各个widget的visibility。
Note:之前我的实现都是进行activity的切换或者动态的inflate view。
3.创建按钮列表
动态创建一系列按钮:
- 在/res/values/arrays.xml中定义多个array,每个button上的文字,背景和id都分别定义一个array。
- 在id.xml中预先定义好每个button的id,这样就可以在代码中全局引用。
- 在java代码中,通过获取array资源,动态inflate每个button后,add到parent view。
Note:以前我都实现是写死在layout文件中,不够灵活。
4.全局访问对象
- 在AndroidManifest.xml中Application标签,指定自己的Application类。
- 代码中通过context.getApplicationContext()来访问
Note:以前我都是用单例模式。上面都方法有一个限制,就是必须在context中才能访问,单例可以在任何类中访问。
5.json数据解析
- 定义类的成员变量,名称与json的key名称完全相同,通过类都反射进行赋值,效率更高。
Note:通过java bean的方式,定义各个成员变量保存json中都值。通过一堆setXXX进行赋值,效率低。
6.text处理
- 一定要用正则表达式进行查找
7.任务队列的处理
任务处理框架:
- 建立一个类,保存任务的list,并提供任务list的增,删,查等操作。
- 建立一个monitor,定期检测任务list的状态,如果有任务,就进行处理。
- 每一类任务的处理,都有单独的处理实现。
- 还需要增加一个通知的机制,当任务处理结束以后。(书中未提及)
Note:以前的任务处理框架跟上面差不多,但是使用消息驱动(通过消息机制),而不是通过timer。
8.图像处理时区域选择
- 实现一个FrameLayoutExt,继承自FrameLayout
- 在onDraw方法中,绘制特效区域的边框
- 在onTouch方法中,处理拖拽的实现
9.图像特效处理
灰度:取得bitmap的每个像素点,通过公式:红*0.3+绿*0.59+蓝*0.11,将这个值再设置回像素点
马赛克:将图片分割成小区域,然后用每个小区域中心的像素点,来设置整个小区域。
截图:在Bitmap.createBitmap()方法中,指定矩形大小
旋转:在Bitmap.createBitmap()方法中,传入Matrix对象,matrix里有一些设置方法,比如setRotate等
10.ListView的第一个item显示特殊信息(比如:刷新)
- 复写getCount方法,返回items.size()+1
- getView方法中,通过position进行判断:position为0时,表示第一个item,进行特殊layout的inflate
11.缓存api接口
- 当一些api接口通过json返回数据时,可以将json转换为string后,写入到文件中,保存在本地,文件名称可以是api的url,以保证唯一。
- 一些简单的key-value的数据,可以通过SharedPreference保存
12.apk签名
- 命令行:使用JDK中的keytool和jarsinger工具。
- ADT插件:通过android tool
13.onSaveInstanceState与onRestoreInstanceState
两个方法被调用的条件:
- Activity中的变量被回收
- Activity的状态被动的被改变,比如来电,home键,横竖屏切换。
- 两个方法并不是一定会成对调用
14.处理configration change
- AndroidManifest.xml中,android:configChanges=“xxx”处理,这样当config change的时候,就不会重新调用onCreate,调用onConfigurationChanged方法
15.图像淡入淡出效果
- 在drawalbe下创建资源文件,transition标签
- 每个transition下只能有2个标签
- 通过TransitionDrawable的startTransition和reverseTransition方法进行切换和恢复
16.设置image的样式
- 通过scale标签设置缩放
- 通过shape设置形状
17.动画效果
- 属性动画
- 帧动画
- 补间动画
18.来电拦截
- 通过设置占线时进行呼叫转移,设置到不同的手机号上,可以实现来电转移。
- 设置代码:
设置 取消 查询 始终呼叫转移 **21*电话号码# ##21# *#21# 占线时呼叫转移 **67*电话号码# ##67# *#67# 无应答时呼叫转移 **61*电话号码**响铃时间# ##61# *#61# 无法接通时呼叫转移 **62*电话号码# ##62# *#62#
- 通过发送intent设置,比如 Intent it = new Intent(Intent.ACTION_CALL, Uri.parse("tel:**67*13899999999#")); startActivity(it)
19.监听来/去电
- 来电:通过Receiver接受广播和TelephonyManager里注册listener两种方式
- 去点:通过Receiver一种方式
20.挂断电话
通过反射方式:
- 在TemephonyManager中,获取ITelephony接口
- 继续通过反射,获取ITelephony接口中的endCall方法
21.获取通话记录
- 通过Contact的Content Provider,uri是content://call_log/calls
22.短信
- 发送方式:通过intent和SmsMessage的sendTextMessage方法。
- threadId与电话号码的对应关系,存在于mmssms.db中的canonical-addresses表,uri是content://mms-sms/canonical-addresses
- 短信/彩信的接收,都是通过receiver接收数据,短信通过SmsMessage.createFromPdu进行解析,彩信通过PduParser进行解析
23.查询sd卡中多媒体资源
- 系统对写入sd卡的多媒体资源进行监控,会保存在一些表中
- 表的信息,通过MediaStore进行查询,比如uri,表的列名
24.已接收/发送的彩信
- 保存在mmssms.db里,彩信信息保存在pdu表中,彩信内容保存在part表中
- part表中的mid对应到pdu表中的_id,也就是说是多对一的关系
- part表中的ct表示彩信的类型,有audio,video,image,smil等
- pdu的uri是content://mms,part的uri是content://mms/part
- smil是一种类似html格式的协议,定义彩信的布局和内容
- part表的_data域,定义了彩信内容的非文本彩信的数据文件的地址
25.获取联系人
获取联系人信息的uri
- 不完全信息:Uri.withAppendedPath(ContactsContract.AUTHORITY_URI, "contacts")
- 完全信息:Uri.withAppendedPath(ContactsContract.AUTHORITY_URI, "data/phones")
26.添加联系人:
- 先通过插入RawContacts.CONTENT_URI,生成rawId
- 再通过Data.CONTENT_URI,插入联系人信息
27.sqlite操作
使用replace代替insert命令,可以避免重复插入时,产生的数据冲突异常
28.db4o
面向对象的数据存储
- http://developer.db4o.com/Downloads.aspx下载,将jar文件放在app的lib下
- 使用时,通过类直接进行插入。
- 查询时,通过类的实例。条件查询就是给实例中成员变量赋值然后查询。
29.蓝牙
打开设备:
- 通过intent:BluetoothAdapter.ACTION_REQUEST_ENABLE
- 通过BluetoothAdapter.enable()和disable()
使自己被搜索:
- 通过反射获取BluetoothAdapter获取mService变量,实际为IBluetooth类型接口,此接口中有设置方法。
- 搜索其他蓝牙:
- BluetoothAdapter.getBondedDevices获取已经绑定的蓝牙设备
- BluetoothAdapter.startDiscovery扫描其他设备,通过intent返回搜索信息
数据传输:
- 通过BluetoothSocket与BluetoothSocketServer
- 类似普通的socket机制进行读写
30.第三方库
GTalk客户端:
- GTalk基于XMPP协议的IM
- android上有一个精简的smack,叫做asmack实现了XMPP协议,利用这个lib,可以通过GTalk的公共api
Ftp客户端:
- 可以基于apache的一个开源lib开发
- org.apache.commons.net.ftp
绘制图表:
- AChartEngine库
31.性能测试工具traceview
- Debug.startMethodTracing("xxx.log");
- Debug.stopMethodTracing();
- 生成xxx.log文件,通过traceview xxx.log,会生成一些图表结构进行分析