Android这些坑

来源:互联网 发布:诺基亚商店软件下载 编辑:程序博客网 时间:2024/06/06 08:24
定时任务
1.Timer中执行任务的时候,当执行任务所耗时间大于所设定的时间的时候,会抛出RuntimeException异常,
解决办法:延长周期 或 使用SchedulExecutorService

XML布局
1.当手动添加一个View对象到布局中的时候,XML中定义的宽高属性是没有效果的,需要在代码中通过LayoutParams来设置相应的属性

内存泄漏
1.单例引起的内存泄漏
当你使用静态定义了单例类的应用的时候,当你因为某些原因需要把activity的上下文传进来,当调用方的activity被销毁时,由于该activity的context组建与静态绑定到了一起,所以导致垃圾回收器无法回收该context,从而导致内存泄漏。
解决办法:把context用getApplicationContext替换。


Fragment
1.Fragment与Activity进行接口回调时,如果,activity是数据提供方,那么,可以把Activity的对象以一个静态的方式保存到一个静态类中,public static Activity activity;然后再Fragment中,先把该activity转换为所对应的Activity,再去获取接口的方法。

线程
1.在子线程中是不能弹出Toast的,必须放到UI线程中(可能是因为显示Toast的也是一个控件,而设置控件必须在主线程中进行)

RadioGroup
1. RadioGroup里面的RadioButton不能设置Margin
原因是没有使用RadioGroup.LayoutParams,把LinearLayout.LayoutParams等用RadioGroup.LayoutParams替换。

2. RadioGroup的removeView(index);方法中,index是下标,不可以直接调用getChildCount();方法来获得总大小去循环调用removeView方法,因为RadioGroup中的子控件,不一定是0,1,2,3。。。等。如果要去除所有的子控件,可以调用removeAllViews();方法。

RecyclerView
1.RecyclerView中在使用GridLayout模式的时候,如果仅有两列的时候,当平分宽度的时候,会造成中间间隙过宽。
原因:由于两者都居中了,都给中间留了位置,当然也就造成了更大的空隙
解决办法:
在适配器中的onCreateViewHolder方法中,通过给view设置params,设置的条件是,当position%2==0或者!=0,
判断该给左边setMargin多少,给右边setMargin多少。

2.RecyclerView中使用GridLayout类型的时候,如果,父容器没有使用match_parent的话,中间可能就会产生间隙。

ListView
1. 当采用ArrayAdapter的时候,如果布局文件是TextView,如果该TextView中使用了clickAble=true的话,将会抢夺焦点,导致ListView的点击事件不可用
0 0
原创粉丝点击