Android开发中应该注意的事项

1、子线程中不能更新界面,更新界面必须在主线程中进行

2、Fragment注意的事项:

a)  Activity调用Fragment中的方法

b)  Thread或者Handler调用Fragment中的方法

需要注意getActivity()可能为空;需要加入下面代码避免空指针

If(getActivity() == null || !isAdd()){

return;

}

3、String类型的常量和变量相互比较要使用常量equals变量,因为变量可能为空;

If(常量.equals(变量)){

...

}

4、Activity或者Fragment中的BroadCastReceiver设置监听和取消监听要成对出现。onReceive方法中调用外部类要判空

5、网络操作不能在主线程中调用

6、Activity销毁之前必须先销毁附属在Activity上的Dialog;不能出现Activity销毁后,还操作Dialog对象的情况

7、使用数据库的时候要注意到数据库死锁的问题。如果数据库没有做同步处理,必须在主线程中调用db,保证db不被lock

8、Try catch 不能使用log打印错误信息,避免出现空指针。使用e.printStackTrace()打印错误信息

9、打开的流资源一定要关闭,比如文件读写,数据库读写

10、Static引用的Map或者List集合要手动释放,尽量不要使用static引用集合

11、遍历集合的时候不能对集合进行增删。常出现在多线程中

12、一个方法不能过长,方法过长要拆分成几个方法

13、判断条件比较多的情况下,尽量使用卫语句取代嵌套条件表达式,例如:

If(!file.exist()){

return;

}

这样可以避免层次太深,维护代码时更关注主要逻辑,忽略非法情况

14、Do not keep long-lived references to a context-activity(a reference to an activity should have the same life cycle as the activity itself)

15、Try using the context-application instead of a context-activity

16、Avoid nonstatic inner classes in an activity if you don’t control their life cycle,use a static inner class and

make a weak reference to the activity inside.The solution to the issue is to use a static inner class with

a WeakReference to the outer class, as done in ViewRoot and its W inner class for instance.

(创建handler的时候要使用static内部类,否则会出现内存泄露)

17、Android UI 布局中文字使用sp单位,其它的使用dp单位,不能使用px单位

18、一个方法内层级太深,可以使用卫语句减少层级,可以抽出多个方法,减少代码量

19、尽量少使用BroadcastReceiver,频繁使用广播会造成

a) 多对多调用

b) 传递参数很随意不受控制

c) 像指针一样,没有堆栈信息,碰到问题不容易解决

d) 破坏了类的封装性,违反了高内聚低耦合原则

20、能不使用Handler的情况下,尽量少使用Handler

a) 传递参数很随意不受控制,维护成本高

b) 异步消息接到后,界面状态需要判断,可能界面已经销毁

c) 使用了Handler,一定要控制一个类的范围内,不能将Handler传递到其他类中去,因为这样会破坏类的封装性

d) 像指针一样,没有堆栈信息,碰到问题不容易解决。这条相对BroadcastReceiver容易,因为在一个类内,找起来相对容易

21、编程要遵循高内聚、低耦合原则。类和类之间要尽量降低耦合性,一个类尽量少的依赖其它类里的属性或者方法

22、图片管理方法可以采用Universal-image-loader

23、Boolean型变量前缀使用has或者is

24、不能使用System.out.println打印log

25、变量命名不能1,2,3,4...后缀,要看名知意

26、If方法要有{}包裹

27、Log的tag不能是””

28、统一使用format和import格式开发

29、代码中不能出现硬编码(使用与配置分离,或者通过参数的方式,或者通过面向接口编程)

在Android开发中有时候代码为了方便直接硬编码,其实这是一种不好的习惯,在PC平台写代码可能直接使用的比较多。在移动平台上有时要考虑多国语言问题,Android设计了getString()方法从资源Res文件夹中读取String字符串,这些字符串以xml形式保存在Values.xml文件中。Android平台在一定程度上更面向对象,除了Java本身,在构架上仍然使用MVC这样的UI和代码逻辑分离,UI可以专心的设计用户界面,代码可以通过类似Jar或MIDL文件来再发行应用,大大提高了代码复用和维护性。

上面都是硬编码的坏处,其实好处也是有的,从单独语言和简单程序来说具有运行效率高和设计简单等方法,但是对于复杂的工程还是建议MVC方式设计比较合理。Android对于资源文件进行了缓存机制,在R类中进行全局注册,也就是说findViewById之后会对这个xml文件做缓存,比如Layout或String。

30、不能在for循环中进行独立的数据库操作

31、不能使用ScrollView包裹ListView/GridView/ExpandableListVIew;因为这样会把ListView的所有Item都加载到内存中,要消耗巨大的内存和cpu去绘制图面

以上内容是基于过往开发经验(自己和同事的)进行的总结,如有不妥之处还请指正,欢迎大家一起提出自己的想法,该篇博客我会持续更新...,希望大家共同进步!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-28 10:11:06

Android开发中应该注意的事项的相关文章

由浅入深讲解android开发中listview的性能优化

ListView是一种可以显示一系列项目并能进行滚动显示的View.在每行里,既可以是简单的文本,也可以是复杂的结构.一般情况下,你都需要保证ListView运行得很好(即:渲染更快,滚动流畅).在接下来的内容里,我将就ListView的使用,向大家提供几种解决不同性能问题的解决方案. 如果你想使用ListView,你就不得不使用ListAdapter来显示内容.SDK中,已经有了几种简单实现的Adapter: ·         ArrayAdapter<T> (显示数组对象,使用toStr

Android开发中,那些让你觉得相见恨晚的方法、类或接口

本篇文章内容提取自知乎android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常见.大多数的函数自己还是见过的,这里记录一下备忘.同时呢,也推荐一个github项目,里面记录了自己日常开发中见过的比较有用的东西开发中常用的工具.链接 Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[],而在StackTraceElement类中有四个方法g

android开发中碰到的三个小问题

Android开发中注意到的几个问题 1.  关于actionbar 初始化配置actionbar,getactionbar经常为null,原因是因为在源码或者布局文件中设置了全屏显示的缘故,不设置全屏显示就不会有问题. 2.  关于textview Textview默认是没有焦点的,因此不可能有点击事件,也无法直接实现背景的selector.通过设置android:clickable = true;就可以了,这一点与Button有很大的不同 3.  关于sourcinsight中的php代码.

android开发中监听器的三种实现方法(OnClickListener)

Android开发中监听器的实现有三种方法,对于初学者来说,能够很好地理解这三种方法,将能更好地增进自己对android中监听器的理解. 一.什么是监听器. 监听器是一个存在于View类下的接口,一般以On******Llistener命名,实现该接口需要复写相应的on****(View v)方法(如onClick(View v)). 二.监听器的三种实现方法 (以OnClickListener为例) 方法一:在Activity中定义一个内部类继承监听器接口(这里是OnClickListener

android开发中,两个按下手机实体返回键,两个Activity反复来回跳转的问题

android开发中,对于用intent实现跳转的Ativity,有时候按下手机的返回键时,两个Activity之间会多次相互跳转,始终退出不了程序的情况.这是由于从Activity  A跳转到Activity  B时,A被压入Activity栈中:当从B返回时,默认又重新创建了一个Activity A对象,这样一来就有了多个Activity A对象.所以造成了无法退出情况. 解决办法是:在AndroidManifest.xml文件中找到Activity A项,在其属性中加入  android:

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

Builder模式详解及其在Android开发中的应用

一.引言 在Android开发中,采用Builder模式的代码随处可见,比如说Android系统对话框AlertDialog的使用或者是Android中的通知栏(Notification)的使用,又比如说在一些常用的第三方库中也随处可见其踪迹,比如说一些常用的网络请求库如OkHttp或者是retrofit,又或者是图片加载库Glide中也不缺乏它的应用. 为什么Builder模式在Android或是Java开发中这么火呢?因为它相较于构造函数或者是Get/Set方法,它的灵活性和封装性上都比较有

android权限--android开发中的权限及含义(上)

android权限--android开发中的权限及含义(上) android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户 android.permission.FLASHLIGHT 访问闪光灯,android开发网提示HTC Dream不包含闪光灯 android.pe

Android学习笔记_78_ Android开发中使用软引用和弱引用防止内存溢出

在<Effective Java 2nd Edition>中,第6条"消除过期的对象引用"提到,虽然Java有 垃圾回收机制,但是只要是自己管理的内存,就应该警惕内存泄露的问题,例如的对象池.缓存中的过期对象都有可能引发内存泄露的问题.书中还提到可以用 WeakHashMap来作为缓存的容器可以有效解决这一问题.之前也确实遇到过类似问题,但是没有接触过"弱引用"相关的问题,于是查阅了一些资料. <Java 理论与实践: 用弱引用堵住内存泄漏>