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. jenkins 整合maven,svn(配置钩子程序实现提交代码自动构建),tomcat实现热部署(windows+linux分别实现)

    springboot : https://blog.csdn.net/zjh_746140129/article/details/80904876 1 准备工作: (1)运行jenkins的tomca ...

  2. 002.NFS相关配置项

    一 配置文件(/etc/exports) 1.1 配置文件格式 <输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)] 二 输出目录 ...

  3. 大数据技术之_14_Oozie学习_Oozie 的简介+Oozie 的功能模块介绍+Oozie 的部署+Oozie 的使用案列

    第1章 Oozie 的简介第2章 Oozie 的功能模块介绍2.1 模块2.2 常用节点第3章 Oozie 的部署3.1 部署 Hadoop(CDH版本的)3.1.1 解压缩 CDH 版本的 hado ...

  4. Android-认识Service

    Android-认识Service 学习自 郭霖的博客 https://developer.android.google.cn/reference/android/app/Service#WhatIs ...

  5. Lambda的分类(语句Lambda和表达式Lambda)

    学习自 <C#本质论> Overview 在上一文中,我们简而又简的了解了一下,匿名方法和Lambda表达式,关于匿名方法这里暂且不表,本文我们来更加详细的了解一下Lambda表达式. 本 ...

  6. SQL2008配置管理工具服务显示远程过程调用失败

    问题: 打开SQL2008配置管理工具,发现SQL服务名称里什么也没有,只有一个提示:   解决办法: 这是由于电脑中安装有Visual Stuido, 它内含一个本地SQL数据库服务:Microso ...

  7. qq sid qq sid 是什么 qq sid 怎么用

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha ======= qq sid qq sid  是什么 qq sid  怎么用 ===== ...

  8. PHP 合理配置实现文件上传及保存文件到数据库

    合理配置 php.ini 如何配置php.ini实现PHP文件上传功能.其中涉及到php.ini配置文件中的upload_tmp_dir.upload_max_filesize.post_max_si ...

  9. hdu 4438 第37届ACM/ICPC 天津赛区现场赛H题

    题意:Alice和Bob两个人去打猎,有两种(只)猎物老虎和狼: 杀死老虎得分x,狼得分y: 如果两个人都选择同样的猎物,则Alice得分的概率是p,则Bob得分的概率是(1-p): 但是Alice事 ...

  10. HTML5之Javascript多线程

    Javascript执行机制      在HTML5之前,浏览器中JavaScript的运行都是以单线程的方式工作的,虽然有多种方式实现了对多线程的模拟(例如:Javascript 中的 setint ...