关键字 : android app, android develop, android summary
从 2010.04 启动该项目到现在完成主要功能模块 , 分享一下开发历程和注意事项。
开发环境 : ubuntu7.10 + eclipse 3.5 + sdk
下面是开发总结 :
-
基于源码级的 SDK 以及 SDK 升级注意事项
-
熟悉其如何做资源国际化
-
熟悉 其如何支持不同屏幕大小 , 不同 density 介质
-
熟悉 其主要的 API 以及支持的最低版本和不被再支持的 API
-
了解其分层架构
-
升级SDK
-
确保 该平台支持相关的 cglib 版本 ( 否则要升级 ubuntu)
-
简单容行的方式是remove ~/.android下的相关东西,remove先前的相关版本,再升级
-
部分Resources(如strings中有%s的)可能需要修改才能适应新的版本
-
新的sdk里可能不包括老的如2.01版本
-
-
-
Emulator & Mobile
-
用adb shell 操作emulator
-
push / pull file in emulator
-
Eclipse->window->Show View->File Explorer-> pull a file from the device(or push a file onto the device)
-
-
用 real mobile连接usb来直接测试(mobile 必须设置为develop/debug mode)
-
emulator更能用于性能测试,功能测试。而mobile更适合触摸操作测试和一些View的真实展现测试
-
屏幕大小适应测试(枚举大,中,小),屏幕方向(枚举横,竖屏),任务切换测试
-
内存适应只能在mobile上做测试
-
-
系统配置项
-
SharedPreferences存储位置及如何在emulator上手动修改
-
找到存储位置: \data\data\your package dir\shared_prefs\your xml files
-
按照上面的pull/push the file
-
-
SQLite(sqlite3)
-
默认存储位置:\data\data\your package dir\databases\your database name
-
按照上面的用adb shell 操作emulator做部分database的设计和数据更新
-
设计版本更新和升级
-
-
Other File I/O
-
assert下文件读取
-
文件权限以及读写
-
-
解读AndroidManifest.xml
-
application/process标识
-
最开始启动的activity
-
activity栈的形式(指定taskAffinity&launchMode="singleTask"),而且转向一个新的activity是用intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT)的形式
-
需要的权限部分
-
支持的最低版本
-
-
-
基于 View,Context,Manager 的开发
-
系统View & Layout(Layout也是View)
-
用View本身来做其他Layout间的一个分隔
-
常用的View&Layout: ListView,ScrollView,RelativeLayout,TableLayout
-
设计常用的style/theme用到的Drawable: http://idunnolol.com/android/drawables.html
-
常用的图片操作
-
指定颜色的渲染( setColorFilter)
-
剪裁
-
-
-
自定义View & Layout
-
- public class TouchListView extends ListView { public TouchListView(Context context, AttributeSet attrs, int defStyle) {
- } }
-
- public class Toolbar extends LinearLayout {
- public Toolbar(final Context context) {
- super(context);
- }
- public Toolbar(final Context con, AttributeSet attrs) {
- }
- }
-
-
Application,Activity,Service,View,Intent
-
Application,Activity,Service与Context的关系
-
View与Context的关系
-
用Application来做Activity,Service,View间的全局变量(这比自己用Singleton实现好)
-
用工厂模式使用Intent
-
做activity跳转
-
sendBroadcast(实时数据交换可借助Thread+ BroadcastReceiver )
-
-
-
WindowManager 、PackageManager 等的使用
-
-
网络 IO
-
java.net
-
android.net
-
org.apache.http
-
如果没有让他在AsyncTask中操作,则他的TimeOut设置必须少于5秒(为ANR等待时间)
-
java.net.UnknownHostException
-
如果发生在emulator,可参考: http://blog.csdn.net/abby_dcy/archive/2010/08/09/5798945.aspx
-
如果发生在mobile,则一般是DNS解析问题,要么允许用户再重试操作,要么把Host的域名改为public ip address
-
-
-
-
绘图部分
-
在View上绘图
-
只在原来View上加边框等
-
- @Override
- protected void dispatchDraw(Canvas canvas) {}
-
-
自定义View
-
- @Override
- protected void onDraw(Canvas canvas) {
-
-
-
在Bitmap上绘图
-
- Bitmap result = Bitmap.createBitmap(48,48, Config.ARGB_8888);
- Canvas canvas = new Canvas(result);
- ...
- canvas.drawBitmap(result, rect, rect, paint);
-
-
-
动画
-
帧动画
-
控制侦速率在25FPS以让其更流畅
-
-
渐变动画
-
平移
-
缩放
-
旋转
-
透明
-
-
-
ANR
-
构建消息以及消息循环处理Handler
-
使用AsyncTask
-
-
Exception & UncaughtException
-
使用UncaughtExceptionHandler
-
-
引入第三方 jar 以及与其他 app 共享数据
-
通过add user library方式添加第三方jar
-
Content Provider的使用
-
-
性能优化 / 调优
-
代码级的规范
-
Method级的调优
-
Method Profiling(如果直接usb连接mobile,需要root权限作此项)
-
-
GC分析
-
使用Allocation Tracker
-