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) 像指针一样,没有堆栈信息,碰到问题不easy解决

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

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

a) 传递參数非常任意不受控制,维护成本高

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

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

d) 像指针一样。没有堆栈信息。碰到问题不easy解决。这条相对BroadcastReceivereasy,由于在一个类内,找起来相对easy

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文件来再发行应用,大大提高了代码复用和维护性。

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

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

31、不能使用ScrollView包裹ListView/GridView/ExpandableListVIew;由于这样会把ListView的全部Item都载入到内存中,要消耗巨大的内存和cpu去绘制图面

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

【Android归纳】开发中应该注意的事项的更多相关文章

  1. Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听

    原文:Android TV开发中所有的遥控器按键监听及注意事项,新增home键监听 简单记录下android 盒子开发遥控器的监听 ,希望能帮到新入门的朋友们 不多说,直接贴代码 public cla ...

  2. Android应用开发中关于this.context=context的理解

    在Android应用开发中,有的类里面需要声明一个Context的成员变量,然后还需要在该类的构造函数中加上this.context=context;这行代码.为什么要这么写呢?不写不行么? 先看下面 ...

  3. Android学习开发中如何保持API的兼容

    Android学习开发中如何保持API的兼容: 1,采用良好的设计思路 在设计过程中,如果能按照下面的方式来进行设计,会让这个API生命更长久 面向用例的设计,收集用户建议,把自己模拟成用户,保证AP ...

  4. Android应用开发中三种常见的图片压缩方法

    Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap com ...

  5. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  6. 【Android】开发中个人遇到和使用过的值得分享的资源合集

    Android-Classical-OpenSource Android开发中 个人遇到和使用过的值得分享的资源合集 Trinea的OpenProject 强烈推荐的Android 开源项目分类汇总, ...

  7. Unity3d Android Http 开发中的坑(吐槽

    在一般的U3D网络开发中,直接使用WWW类便足够正常使用,但我在发现使用WWW下载大文件时,会导致整个程序卡顿的情况(不清楚是否我个人电脑问题),所以干脆使用HttpWebRequest/HttpWe ...

  8. 浅谈Android系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

  9. 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)

    转至 (http://blog.csdn.net/yanzi1225627/article/details/17652643) 经常听人问Camera开发中,各种变形问题,今天有空就在此梳理总结下. ...

随机推荐

  1. 【Ray Tracing The Next Week 超详解】 光线追踪2-2

    Chapter 2:Bounding Volume Hierarchies 今天我们来讲层次包围盒,乍一看比较难,篇幅也多,但是咱们一步一步来,相信大家应该都能听懂 BVH 和 Perlin text ...

  2. 【Ray Tracing in One Weekend 超详解】 光线追踪1-9 景深

    今天我们来学最后一章 Chapter11:Defocus Blur Preface 散焦模糊 也称 景深 首先,我们来了解一下散焦模糊,我们在真实相机中散焦模糊的原因是因为它们需要一个大圈(而不仅仅是 ...

  3. StringBuffer StringBuilder append

    StringBuilder is not thread safe. So, it performs better in situations where thread safety is not re ...

  4. flask run方法和run_simple

    1.Flask提供的Web服务器不适合在生产环境中使用 2.run方法启动flask集成的服务器: 例: if __name__ == '__main__': app.run(debug=True) ...

  5. kotlin 安装 使用

    插件下载 下载 kotlin 扩展 . 可以 简写 findviewbyid 这些. 比如 id 是 textview 直接 这样赋值 textview.setText("测试文字" ...

  6. 【Codechef-Hard】Chef and Churu 分块

    题目链接: https://www.codechef.com/problems/FNCS Solution 大力分块.. 对序列分块,维护块内前缀和.块的前缀和,修改时暴力维护两个前缀和,询问单点答案 ...

  7. Hystrix简单介绍

    Netflix的Hystrix是一个帮助解决分布式系统交互超时处理和容错的类库,同样拥有保护系统的能力. 服务隔离 服务降级 1.服务隔离 在一个系统中,一个业务通常会依赖多个服务,且这若干个服务的调 ...

  8. 使用Xcode打包上传APP

    1.打开xcode,进入product->Scheme->EditScheme,找到Archive,最上面的设备选择IOSDevice,在BuildConfiguration中选中Rele ...

  9. FireDAC 下的 Sqlite [2] - 第一个例子

    为了方便测试, 我把官方提供的 C:\Users\Public\Documents\Embarcadero\Studio\14.0\Samples\data\FDDemo.sdb 复制了一份到 C:\ ...

  10. 新浪微博基于MySQL的分布式数据库实践

    提起微博,相信大家都是很了解的.但是有谁知道微博的数据库架构是怎样的呢?在今天举行的2011数据库技术大会上,新浪首席DBA杨海潮为我们详细解读了新浪微博的数据库架构——基于MySQL的分布式数据库实 ...