异常:
1. new File(String path)
这个path不能为空,否则空指针
2. ListView数据更新导致的数组越界异常ArrayOutOfBound
ListView通常会对应一个数据集,一般用List保存。
ListView刷新时,首先调用Adapter的getCount(), getCount通常返回数据集中数据的个数。
假设getCount()返回n,
则接着调用 n 次 Adapter的getView()方法。
而getView通常会访问数据集指定位置的数据。
当数据集不变时,没有问题。
一旦数据集发生变化,确切的说,数据减少时,
例如减少1个,那么访问数据集List第n-1位置是,就发生数据越界。
发生异常的场景:
支持删除数据的ListView。
解决方案:
1. getView中访问数据前,检查是否数组越界。
或者2. 删除数据时,确保界面没有同时刷新。这个在界面设计上有点复杂。
3. 遍历集合同时修改集合导致的ConcurrentModificationException
错误的代码如下,以map为例。这里remove或者put都会导致该异常。
比较坑的是,三星手机会出现该异常,但是会被系统吃掉,代码直接终止,应用进程不会终止,界面不会有任何提示。
小米等不会报该异常,一切正常。
正确的代码如下:
非异常
1. dialog构造函数的cancellistener的监听器可以为null。
默认行为就是dismiss。
这个没有官方文件规定,
通过看源代码发现,并已实践验证。
风险:后续版本的android源码会不会crash,无法保证。