您的位置:首页 > 移动开发 > Android开发

致Android-那些年,我们一起踩过的坑

2016-06-18 23:29 756 查看
大爷的,从搞android至今,踩过的坑倒是不少,MD,要是同一个坑,踩一次也就算了,踩两次、多次那就显得狠low了…

记录那些年,希望跟我踩同一个坑的同胞们一些帮助(主要是怕自己踩同一个坑,哈哈~~),问题虽小,可能意义重大,致我们一起踩过的坑,持续更新中…

1.最近在网上搞了个Android studio 的DOME玩玩,在公司的玩的很溜,TM,一回到家,各种ERROR,难道是我很久没在家开过电脑了??什么ERROR讷?

情景1:倒入项目,build时间ZTM长,等不下去呀,直接崩溃

情景2:好不容易倒进去了,报什么找不到android-support-appcompat-v7.23+

艹,这不是很明显嘛,没更新android sdk嘛,找到一些国内镜像服务器地址,http://www.androiddevtools.cn/ 随便选个可行的,打开SDK Manager 配置下地址端口,不就完事了嘛。

结果总是不尽人意,他妈的在android studio 直接更新sdk还更新不了,非的让我手动打开SDK Manager 来搞。由于我忽略了一项没更新,Extra 下的一项-关于 \sdk\extras\android\m2repository\com\android\support下的,截个图看看标注下


跟新后,会显示完整的各个版本,就这个鸟,原来如此



2.今天倒入一个项目包这个鸟几把错

Error:Unable to start the daemon process.
This problem might be caused by incorrect configuration of the daemon.
For example, an unrecognized jvm option is used.
Please refer to the user guide chapter on the daemon at https://docs.gradle.org/2.10/userguide/gradle_daemon.html Please read the following process output to find out more:
-----------------------
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap
Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0


Google 了一把,初始化了下cache 没用,File-Invalidate cache

删除 C:\Users\XX.gradle\daemon\2.10\registry.bin文件还是没卵用

然后直接把该工程下的gradle.properties 中的一句卵注释掉,成功编译,先别管那么多,编译成功先

rg.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8


3.ListView 实现消息列表出现头像错位现象

最近用listview实现了一个消息列表,马丹,第一个企业头像出项错位,把进程杀掉,重新进入,都发生错位,看代码,毛问题没有…最后定位,listview属性用了wrapContent,在绘制listview 时 ,重复调用了getView方法。由于需要动态绘制高度,所以导致重复调用adapter的getView方法,从而导致头像错误现象。

解决办法:把listview属性换成matchParent,心得:在listview中,当item条目超过手机屏幕时,wrapcontent相对matchParent要耗资源,因此,在开发过程中,尽量使用matchParent

4.Activity被回收导致fragment的getActivity为null的解决办法

如果系统内存不足、或者切换横竖屏、或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity。

app发生的变化为:某种原因系统回收MainActivity——FragmentA被保存状态未被回收——再次点击app进入——首先加载的是未被回收的FragmentA的页面——由于MainActivity被回收,系统会重启MainActivity,FragmentA也会被再次加载——页面出现混乱,因为一层未回收的FragmentA覆盖在其上面——(假如FragmentA使用到了getActivity()方法)会报空指针,出现crash。

解决办法很简单:

A. MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果!

B. 在活动的onCreate中

//app长时间在后台运行,再次进入app的时候可能会出现crash,而且fragment会有重叠现象

if(savedInstanceState!=null){

String FRAGMENTS_TAG = “Android:support:fragments”;

savedInstanceState.remove(FRAGMENTS_TAG);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息