?
关键字: 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
- http://www.iteye.com/topic/260042
- 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)
- http://dimitar.me/how-to-connect-your-android-phone-to-ubuntu-to-do-developmenttestinginstallations-or-tethering/
- 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的使用?
- 性能优化/调优?
- 基于View的优化http://dl.iteye.com/topics/download/774b3e9e-1c48-33bd-bc9d-5c27da998181
- 代码级的规范
- Method级的调优
- Method Profiling(如果直接usb连接mobile,需要root权限作此项)
- GC分析
- 使用Allocation Tracker
1 楼 mx285545974 2011-01-17
总结的很好,很全面,学习了。。
2 楼 zhs2472 2011-01-17
要是能把每一项稍作展开就完美了 期待~
3 楼 jacksv123 2011-01-17
总结得比较好,希望有更加详细的介绍
4 楼 seya 2011-01-17
这些我都懂、、、
5 楼 xhdnf 2011-01-17
太好了,正是所需要的,看来得先熟悉ubuntu
6 楼 wzerolai 2011-01-18
看来我还地多多学习学习了。
7 楼 ak121077313 2011-01-19
这些初稿能不能别那么初。。。。
8 楼 a123456603 2011-01-19
呵呵,只有目录,期待具体点。。。
9 楼 crazybull 2011-01-19
期待详细总结~~~
10 楼 fkpwolf 2011-01-22
这总结偏向于细节了,流水账