您的位置:首页 > 移动开发 > Android开发

Android开发中的注意事项

2015-01-13 10:31 267 查看
1. 为Activity声明系统配置变更事件
系统配置变更事件是指转屏,区域语言发生变化,屏幕尺寸发生变化等,如果Activity没有声明处理这些事件,发生这些事件时,系统会把Activity杀掉然后重启,并尝试恢复状态,Activity有机会通过onSaveInstanceState()保存一些基本数据到Bundle中,然后Bundle会在Activity的onCreate()中传递过去。虽然这貌似正常,但是这会引发问题,因为很多其他的东西比如Dialog等是要依赖于具体Activity实例的。所以这种系统默认行为通常都不是我们想要的。为了避免这些系统默认行为,就需要为Activity声明这些配置,如下二个是每个Activity必须声明的:

<activity android:configChanges="orientation|keyboardHidden">

几乎所有的Activity都要声明如上,为什么Android不把它们变成Default的呢?

2. 尽量使用Android的API 这好像是废话,在Android上面开发不用Android
API用什么?因为Android几乎支持Java SE所有的API,所以有很多地方Android API与Java SE的API会有重复的地方,比如说对于文件的操作最好使用Android里面Context封装的API,而不要直接使用File对象:Context.openFileOutput(String);
// no File file = new File(String)

原因就是API里面会考虑到Android平台本身的特性;再如,少用Thread,而多使用AsyncTask等。

3. 要考虑到Activity和进程被杀掉的情况 如了通常情况退出Activity外,还有Activity因其他原因被杀的情况,比如系统内存过低,系统配置变更,有异常等等,要考虑和测试这种情况,特别是Activity处理重要的数据时,做好的数据的保存。

4. 小心多语言 有些语言真的很啰嗦,中文或英文很简短就能表达的事情到了其他语言就变的死长死长的,所以如果是wrap_content就可能把其他控制挤出可视范围;
如果是指定长度就可能显示不全。也要注意特殊语言比如那些从右向左读的语言。

5. 不要用四大组件去实现接口 一是组件的对象都比较大,实现接口比较浪费,而且让代码更不易读和理解;
另外更重要的是导致多方引用,可能会引发内存泄露。

6. 用getApplication()来取Context当参数 对于需要使用Context对象作为参数的函数,要使用getApplication()获取Context对象当参数,而不要使用this,除非你需要特定的组件实例!getApplication()返回的Context是属于Application的,它会在整个应用的生命周期内存在,远大于某个组件的生命周期,所以即使某个引用长期持有Context对象也不会引发内存泄露。

7. 主线程只做UI控制和Frameworks回调相关的事。附属线程只做费时的后台操作。交互只通过Handler。这样就可以避免大量的线程问题。

8. Frameworks的回调不要做太多事情仅做必要的初始化,其他不是很重要的事情可以放到其他线程中去做,或者用Handler Schedule到稍后再做。

9. 要考虑多分辨率 至少为hdpi,
mdpi, ldpi准备图片和布局。元素的单位也尽可能的使用dip而不要用px。

10. 利用Android手机的硬键 几乎所有的Android手机都有BACK和MENU,它们的作用是返回和弹出菜单,所以就不要再在UI中设计返回按扭和菜单按扭。很多优秀的应用如随手记和微信都有返回键,他们之所以有是因为他们都是从iOS上移植过来的,为了保存体验的一致,所以也有了返回和菜单。但这不够Android化,一个纯正的Android是没有必须重复硬键的功能的。

11. 导入的类库需要和项目在同级目录下,谨防资源文件与类库中冲突
12. textviewsetText为int时候,textview的color代码设置,set/getTextSize
单位问题
13. JSON
属性节点不能有空格
14. asset下使用第三方字体
xx.ttf 必须都为小写
15. listView自定义adapter中复用holder时候,如果view/checkbox等对应不同状态显示不同的图片,切记情况写全,不然会出现错乱问题。
16. 做上传时候记得问问服务端是否限制了上传文件大小
17. context/getApplicationContext,视你是否需要涉及到ui时候选择合适的context
18. 存在复用时候,尽量new对象等操作移到复用之外,以防oom
19. 数据库操作加锁
20. 用Activity来显示出的dialog,popupwindow等控件需要在Activity关闭时候(之前也给关了)
21. toast,判断是否格式(为空等)封装
22. ui布局在多机型上的测试
23. new
handler时候尽量写在紧跟其他控件的获取之后,防止空指针
24. context.startActivity();要intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
25. 针对一些特定的只能为数字的editText
设置软键盘类型为数字,为用户节省切换这一步骤。edittext.setInputType(EditorInfo.TYPE_CLASS_PHONE);
26. armeabi-v7a
27. 监听键盘输入会有两次:(一次up
一次down)
28. 不同类型的资源文件最好不要重名,不然会偶尔发现空指针,eclipse会抽,找成另一控件
29. AlarmManager
PendingIntent 这玩意在miui 不管用。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: