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指针问题,宁可错杀,不可放过。
 

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

  1. Android学习探索之Java 8 在Android 开发中的应用

    前言: Java 8推出已经将近2年多了,引入很多革命性变化,加入了函数式编程的特征,使基于行为的编程成为可能,同时减化了各种设计模式的实现方式,是Java有史以来最重要的更新.但是Android上, ...

  2. android开发中fragment获取context

    在用到fragment时无法使用.this来指定当前context内容,android开发中fragment获取context,可以使用getActivity().getApplicationCont ...

  3. java中的反射机制在Android开发中的用处

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反 ...

  4. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

  5. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  6. 怎样实现了捕获应用中的日志在android开发中

    怎样实现了捕获应用中的日志在android开发中,大家可研究一下. Process mLogcatProc = null; BufferedReader reader = null; try { mL ...

  7. Android开发中Eclispe相关问题及相应解决(持续更新)

    1.Eclipse项目中的Android Private Libraries没有自动生成. 一般而言,在Android开发中,项目中引用到的jar包会放到项目目录中的libs中,引入库会放到Andro ...

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

    最近博客写的少了,以后还得经常更新才行. ------------------------------------------------------------ 1.特定业务需求下try cath ...

  9. 关于Android开发中的证书和密钥等问题

    关于Android开发中的证书和密钥等问题 引言 除了Android发布应用签名时需要用到证书外,在进行google Map Api开发和Facebook SDK API开发等时都需要申请API Ke ...

  10. Android开发中Bundle用法包裹数据(转)

    Android开发中Bundle用法包裹数据 Bundle的经典用法,包裹数据放入Intent中,目的在于传输数据. SDK 里是这样描述: A mapping from String values ...

随机推荐

  1. Android软件盘InputMethodManager

    调用下面代码:(第一次调用显示,再次调用则隐藏,如此反复),this指activity InputMethodManager imm = (InputMethodManager)this.getSys ...

  2. knockout.js

    最近在使用knockout这个JS的MVVM模型,真的很不错,每次去查英文的文档,的确很累的,抽空的时候就把看到的文档按自己的理解翻译一下.当然我不是逐字的翻译. knockout的官方说明:http ...

  3. MyEclipse的Expressions没有结果的解决办法

    之前我的Expressions在Value这一列什么都不显示,就连简单的1+2结果3都不显示出来. 然后我咬咬牙把它卸载了,然后重装就好了,我也不清楚是什么原因. 1.之前我安装的目录是"C ...

  4. event小解

    首先是一个小例子: <input type="text" onclick="a(event)"/> function a(event){   con ...

  5. selenium2.0集成测试案例

    webDriver模拟点击对web工程测试还是挺方便的. package suite; import java.util.concurrent.TimeUnit; import org.junit.A ...

  6. table边框设置

    一.表格的常用属性基本属性有:width(宽度).height(高度).border(边框值).cellspacing(表格的内宽,即表格与tr之间的间隔). cellpadding(表格内元素的间隔 ...

  7. js屏蔽浏览器右键菜单

    <script type="text/javascript"> function doNothing(){ window.event.returnValue=false ...

  8. linux命令-sed,uniq,cut,wc

    sort sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 ...

  9. oracle中的exists 和in

    有两个简单例子,以说明 “exists”和“in”的效率问题 1) select * from T1 where exists(select 1 from T2 where T1.a=T2.a) ; ...

  10. Math类的round方法小解

    在Math类中有三个关于“四舍五入”的静态方法(ceil,floor,round): ① Math.ceil(number) 向上取整,Math.ceil(11.2) 结果:12            ...