鉴于开发时经常出现同样的错误忘记之前是如何处理的,特开一个专题博客,记录每次遇到问题如何处理的,以及写应用时体验方面应该考虑的地方,而且觉得博文应该重质不重量,总结性的博文比到处转载更有价值,故本博文会时常更新。
一. Back键处理注意:
1、 APK程序更新安装的时候,下载完了点击安装,弹出系统的安装界面,这时候点击Back键返回应用时应该加入检测本地是否已下载过的判断,进行直接安装。
2、 Loading页,如果没有请求数据的,点击Back键时,Back键点击不做任何处理。
如果有请求数据的,点击Back键时,直接关闭应用,并杀进程。
3、 所有错误信息的提示框不可点Back键取消。
4、 等待框可点Back键取消,注意线程打断的处理。属于购买等交易的不可打断,避免重复提交表单操作(可能后台不在我们这边,如***,并不清楚他们是否有这种操作。)
5、
二. 软键盘处理:
1、 提交表单时,输入框事件结束后,注意关键软键盘.调用MyUtils类的closeInputMethodWindow方法。
2、 首次进入界面自动弹出软键盘问题.
在root布局(最外层布局)属性里面添加android:focusableInTouchMode="true"即可.
三. ListView处理:
1、 Adapter绑定数据集是绑定数据集的内存地址,而不是绑定对象,所以绑定的数据集要是重新New对象了地址会变,会导致notifyDataSetChanged()数据显示不出来。
2、
四. 内存处理:
1、 基于android为每个应用分配了固定的内存使用大小,有必要养成良好的编程习惯,不用的对象置Null。其实更好是,不用的图片直接recycle。因为通过置Null。让gc来回收,有时候还是会来不及。
2、 SoftReference弱引用,程序申请大内存,虚拟机内存不够用了gc由可能会释放弱引用的这个图片内存。
3、 怎么查看APP内存分配情况?
(1)通过DDMS中的Heap选项卡监视内存情况:
Heap视图中部有一个叫做dataobject,即数据对象,也就是我们的程序中大量存在的类类型的对象。
在data object一行中有一列是“Total Size”,其值就是当前进程中所有java对象
(2)Runtime.getRuntime().freeMemory();
Runtime.getRuntime().totalMemory();
4、 关闭Activity A图片recycle后,跳至ActivityB,再进入A时,报引用已回收的图片问题。需弄明白本地drawable包里的图片如何加载的,是应用一启动就加载的还是怎么?
五. 环境:
1、Android SDK Manager设置 tools-->options 将Force https://... sources to be fetched using http://...选项打勾,以便解决下载资源时因为中国国情导致下载不了的问题
六. 其他问题:
1、 关于滑动(横,竖向)是否到边缘精确判断的问题。
在view的computeScroll()函数里面获取当前滑动偏移值。
2、 关于ActivityGroup切换Activity引起的内存溢出问题
可以在子Activity的几个生命周期函数体中释放占用内存资源。例如(onstart(),onstop())。
3、 关于改变自定义对话框大小无效问题。
需要先调用show(),然后getWindow().setLayout(int w,int h)设置大小.
4、 关于自定义控件问题.
Android系统自定义控件主要采用的是装饰模式,就是先继承系统控件然后实现自定义功能.关键是要注意触屏事件拦截问题.
当TouchEvent发生时,首先Activity将TouchEvent传递给最顶层的View, TouchEvent最先到达最顶层 view 的dispatchTouchEvent ,然后由 dispatchTouchEvent 方法进行分发,如果dispatchTouchEvent返回true ,则交给这个view的onTouchEvent处理,如果dispatchTouchEvent返回 false ,则交给这个 view 的interceptTouchEvent 方法来决定是否要拦截这个事件,如果 interceptTouchEvent 返回 true ,也就是拦截掉了,则交给它的 onTouchEvent 来处理,如果 interceptTouchEvent 返回 false ,那么就传递给子 view ,由子 view 的 dispatchTouchEvent 再来开始这个事件的分发。如果事件传递到某一层的子 view 的 onTouchEvent 上了,这个方法返回了 false ,那么这个事件会从这个 view 往上传递,都是 onTouchEvent 来接收。而如果传递到最上面的 onTouchEvent 也返回 false 的话,这个事件就会“消失”,而且接收不到下一次事件。
5、 Loading页
6、 若混淆的项目里用到反射了,需将反射代码在配置文件里忽略
7、 0xffff00ff 分组时 0x|ff|ff00ff 分别表示 整数|透明度|颜色值