android开发中应该注意的问题

1.
Activity可继承自BaseActivity,便于统一风格与处理公共事件,构建对话框统一构建器的建立,万一需要整体变动,一处修改到处有效。

2. 数据库表段字段常量和SQL逻辑分离,更清晰。

3. 全局变量放全局类中,模块私有放自己的管理类中,不要相信庞大的管理的东西会带来什么好处,可能是一场灾难。

4. 如果数据没有必要加载,私有模块数据务必延迟初始化,谨记为用户节省内存,总不会有坏处。

5. 异常抛出,集中到合适的位置处理,不要抛出来异常立即捕获,搞的到处是catch。

6. 地址引用链长时(3个以上指向)小心内存泄漏,和警惕堆栈地址指向。

7.信息同步:新插入的数据注意返回ID。

8.多线程时db关闭了会报错。

9.做之前先考虑那些可以公用,资源,layout,类,做一个架构分析。

10 有序队列操作AD操作时注意排序。

11. 删除要注意级联操作。

12 对返回的null对象做好充分的容错。

13. 形参实参:基本类型传值,对象传引用。传址方式,形参可以改变对象状态和内容,但是不可改变实参的内容。

14. listview在数据未满一屏时,setSelection函数不起作用。

15 批量操作严格和视图对应,不容隐患。

16 控制Activity的代码量,保持主要逻辑清晰。其他类遵守SRP,ISP原则。

17. arraylist执行remove时注意移除int和Integer的区别。

18. 调试打印一定要做标记,能定位打印位置,否则后期类多了都不知道是哪里在打印。

19. 码块/常量/资源可以集中公用的一定共用,即使共用逻辑复杂一点也值得,修改起来很轻松,修改一种,到处有效。

20.
setSelection不起作用,尝试smoothScrollToPosition。ListView的LastVisiblePosition(最后一个可见子项)会随着getView方法执行位置不同变动而变。

21与Activity通讯使用Handler更方便; 如果你的框架回调链变长,考虑监听者模式简化回调。

22. Handler在其他线程使用Looper.prepare,主线程则不用。

23. timepicker 点击确定后需要clearFocus才能获取手动输入的时间。

24. 构造函数里面不要轻易启动异步线程。假设异步线程调用了本例的示例,就会悲剧。

25. 千万不要理所当然的以为一个对象不会为空,充分的做好容错处理。

26. ExpandableListView的子列表不能点击要把Adapter的isChildSelectable方法返回true。

27. UI显示注意内容过长的情形,注意按钮的感应范围不小于9mm,注意光标的位置。

28. 服务器和客户端尽量统一唯一标识,否则多少会有歧义和问题。

29. 注释,要写足够的注释,达到看了可以明白某一块代码的效果。

30. 使用Log打日志,打上Tag。

31.
完整型数据一定要用Sqlite的Transaction,大数据一定要用。插入100个数据有20倍的提速,插入1000个数据就有100多倍的提速。

32. 避免String=”null”的情况出现String =
null,=”"都可以。避免出现title=”无主题”这样的数据提交到数据库浪费空间。

33.
存在多个不同的dbhelper实例情况下,sqlitedatabase对象必然存在不同的实例,多线程同时写入数据,轮流写入数据时会不定时的报db is
locked,引起崩溃,不管是操作同张表还是异表。读和写可以同事并发,轮流无规律的交替执行。同时写入数据时解决方案是用并发的每个线程都用事务,db则不会lock,按次整体写入。

34.
建议整个应用维护一个dbhelper实例,只要db没有关闭,全局就只有一个db实例,多线程并发写入db不会lock,严格交替进行写入:123123123。。。(123代表不同线程,轮流插入一个记录),读和写均不会锁住db,读写交替并没有规律,执行次数和程度看cpu分配给哪个线程的时间片长。

35.
一个任务使用事务嵌套N个事务,N个事务中有一个失败,这个任务整体失败,全部成功后,数据才写入,具有安全性,整体性。并且事务写入大批量数据的效率经实际测试成百上千倍的高于一般的单个写入。

36.
经常需要用ListView或者其它显示大量Items的控件实时跟踪或者查看信息,并且希望最新的条目可以自动滚动到可视范围内。通过设置的控件transcriptMode属性可以将Android平台的控件(支持ScrollBar)自动滑动到最底部。

37. Long a; 判断a有没有赋值,if(a == 0)在a没有赋值情况下会报错。应该if(a ==
null),Integer也一样。

38. 编码遇到读写、出入等逻辑要双向考虑,文件导入导出,字符字节相互转换都要两边转码。

39. 一个 int 值与一个 Integer 对象(能包含 int 值的最小对象)的大小比率是 1:4,这个比率可能会让您感到吃惊。额外的开销源于
JVM 用于描述 Java 对象的元数据也就是 Integer。

40.
对象由元数据和数据组成。元数据包括类(指向类的指针,描述了类的类型),标记(描述了对象状态,如散列码、形状等),锁(对象同步信息)。数组对象还包括大小的元数据。

41. 一个在 32 位 Java 运行时中使用 1GB Java 堆的 Java 应用程序在迁移到 64 位 Java 运行时之后,通常需要使用
1.7GB 的 Java 堆。

42. Hash 集合的性能比任何 List
的性能都要高,但每条目的成本也要更高。由于访问性能方面的原因,如果您正在创建大集合(例如,用于实现缓存),那么最好使用基于 Hash
的集合,而不必考虑额外的开销。

43. 对于并不那么注重访问性能的较小集合而言,List 则是合理的选择。ArrayList 和 LinkedList
集合的性能大体相同,但其内存占用完全不同:ArrayList 的每条目大小要比 LinkedList 小得多,但它不是准确设置大小的。List
要使用的正确实现是 ArrayList 还是 LinkedList 取决于 List 长度的可预测性。如果长度未知,那么正确的选择可能是
LinkedList,因为集合包含的空白空间更少。如果大小已知,那么 ArrayList 的内存开销会更低一些。

43.
选择正确的集合类型使您能够在集合性能与内存占用之间达到合理的平衡。除此之外,您可以通过正确调整集合大小来最大化填充率、最小化未得到利用的空间,从而最大限度地减少内存占用。

44. 充分利用封装(提供接口类来控制访问数据)和委托(helper对象来实施任务)。

45. 延迟分配 Hashtable:如果 Hashtable 为空是经常发生的普遍现象,那么仅在存在需要存储的数据时分配 Hashtable
应该是一种合理的做法。

将 Hashtable 分配为准确的大小:由于使用默认大小,因此完全可以使用更为准确的初始大小。

46. EditText在setText时不要忘记是否需要setSelection。在大多数情况下是需要设置的。

47. XML两种情况要注意:1 属性名字时候有重复;2 注意文本是否包含非法字符,注意使用CDATA包裹。

48. 当逻辑没有明显问题时考虑对象属性、函数参数、网络传输参数是否全部了解,是否设置正确。

49. 当出现编译或者运行时错误,别人那没问题时,考虑你的编译环境和环境版本是否有问题。

50.
由于String类的immutable性质,当String变量需要经常变换其值时,应该考虑使用StringBuffer类,以提高程序效率。

51. java 栈的优势是比堆速度快,可共享,主要存放临时变量、参数等,堆的优势是可动态分配内存大小。

52. 只要是用new()来新建对象的,都会在堆中创建,而且其字符串是单独存值的,即使与栈中的数据相同,也不会与栈中的数据共享。

53. 基本数据类型定义的变量称自动变量,存的是‘字面值’,存在于栈中,可共享(存在即不新建)。

54.
多个RandomAccessFile对象指向同一个文件,可使用多个线程一起写入无需锁住对象,经试验结论:三个线程分别写入100万次数据,使用锁约12秒,不使用约8.5秒。

100个线程分别写入1万次数据使用锁耗时约4.2秒,不使用锁耗时约3秒。

55.
XmlPullParser解析慎用nextText()方法,xml比较复杂,含有空标签、重复名字标签时容易出现异常问题;TEXT中使用getText()方法代替START_TAG中使用nextText()方法;START_TAG,TEXT,END_TAG三个事件配合使用。注意每个xml节点之间(不管是开始节点还是结束节点)都会出现TEXT事件。

56. 改变逻辑的时候考虑全部用到这项功能的地方,分散的地方多了,容易大意。

57. 当系统组件出现问题时,查看错误栈信息,在合适的地方将出错方法复写一下,加上try
catch保证不崩溃掉。切记不要扰乱了该系统控件的正常逻辑。

58. 输入控件注意对空格、换行等符号的控制。输入框里内容注意和左右控件的控件,防止误点击。

59. 注意函数参数里的++或者–操作。是++c 还是 c++,区别很大。注意null也可以插入ArrayList中。

60. 永远不要小看null指针问题,宁可错杀,不可放过。

http://www.vmatianyu.cn/summarization-of-technical-experience.html

android开发中应该注意的问题,布布扣,bubuko.com

时间: 2024-08-04 10:08:58

android开发中应该注意的问题的相关文章

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 理论与实践: 用弱引用堵住内存泄漏>

Android开发中使用七牛云存储进行图片上传下载

Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储原理,上面这幅图片是官方给出的原理图,表述当然比较清晰了.可以看出,要进行图片上传的话可以分为五大步: 1. 客户端用户登录到APP的账号系统里面: 2. 客户端上传文件之前,需要向业务服务器申请七牛的上传凭证,这个凭证由业务服务器使用七牛提供的服务端SDK生成: 3. 客户端使用七牛提供的客户端S

MVP模式在Android开发中的应用

一.MVP介绍 随着UI创建技术的功能日益增强,UI层也履行着越来越多的职责.为了更好地细分视图(View)与模型(Model)的功能,让View专注于处理数据的可视化以及与用户的交互.同一时候让Model仅仅关系数据的处理.基于MVC概念的MVP(Model-View-Presenter)模式应运而生. 在MVP模式里通常包括4个要素: (1)View:负责绘制UI元素.与用户进行交互(在Android中体现为Activity); (2)View interface:须要View实现的接口,V

Android开发中的问题及相应解决(持续更新)

最近博客写的少了,以后还得经常更新才行. ------------------------------------------------------------ 1.try cath 异常不全导致的意外问题. 之所以将此问题放在第一位,是因为前阵子中项目中出现了此类情况,并且这种情况很容易不注意或遗忘,但其错误却是致命的. 在Java/Android开发中,当调用一个函数时,此函数抛出一个A类型的异常,很自然的,在调用的地方我们会try.. catch此异常,并且绝大多数情况下,捕获异常是由E