Android开发处理小节

鉴于开发时经常出现同样的错误忘记之前是如何处理的,特开一个专题博客,记录每次遇到问题如何处理的,以及写应用时体验方面应该考虑的地方,而且觉得博文应该重质不重量,总结性的博文比到处转载更有价值,故本博文会时常更新。



一. 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 分别表示 整数|透明度|颜色值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值