Android常见异常处理(二)

Android常见错误处理(二)

考试月非常忙,终于考完试可以继续写代码学习了……还望各位小伙伴多多指教哈~


一、java.lang.OutOfMemoryError

  1. 对于JAVA来说,虚拟机上用于显示图片的堆只有64MB,在安卓里,每一个应用大约只有16MB的内存(参考training/displaying-bitmaps里)。也就是说,一旦我们使用类似于Bitmap这样的类去加载一张图片,很有可能就会把这64MB的堆给占满了。此外,如果对象还存在一个引用,这个对象仍然会存在于堆中,JAVA的垃圾回收机制是不会处理他们的。在这种情况下,你需要用一些工具去评估你的项目必须使用的图片到底需要多大的堆空间(静态),然后去修改这个堆的大小,让它能够容纳你需要的图片。
  2. 不要使用类似于recycle()这样的方法,如1所说,这样的方法并不能改变这样的的错误(引用还在)
  3. 代码里可能有死循环,重复地创建对象实体
  4. 在能使用低像素图片时优先使用低像素照片,而且避免优先选择加载高像素图片(高像素图片占用内存显著多于低像素图片)

二、图片无法充满ImageView

这个解决办法其实蛮简单的,使用ImageView的setScaleType()方法,参数选择fitXY.。如果觉得这样会使图片变形,就是用centerCrop参数


三、RuntimeError:You cannot combine custom titles with other title features

这个错误是说,你不能混合使用多个标题风格,解决方法有下面几种:

  1. 所有标题风格的设置都在AndroidManifest上用android:theme=""设置,至于标题的风格就自己用XML实现好呗
  2. 在styles.xml里加入<item name="android:windowActionBar">false</item>,因为很多自定义标题栏的教程里面,都会有一个设置theme的语句是使用了windowActionBar的,通过把这个改为false就可以避免这样的冲突
  3. 在activity里已经设置了title的theme了,结果在tab里面又设置了其他的theme(例如ViewPager)
  4. 当项目中导入了多个包,可能包之间的AndroidManifest里对theme的设置是不一样的,这样也会导致这个错误

四、Jar mismatch! Fix your depedencies
这个错误多数出现在一个项目中导入了多个包时,主要原因是,可能不同的包使用的jar是不一样的。拿我来说:

我当时使用的library1、library2和项目本身的android-support-v4.jar,就出现了这个错误,说我有3个包,无法识别该用哪一个。解决办法就是把这三个包的这个jar都统一了,所以网上有这样的做法:

把library的jar都换成项目的jar,然后就好了。但是我觉得在*上看到的另一个方法更好:

首先对你的项目使用Android Tools里的Add Support  Library,然后把所有的android-support-v4.jar都去掉,每一个项目或者Library都在build path menu里add external jar或者在Project Properties->Android->Library->Add...里添加jar,这样就能保证包的统一了

五、ClassNotFoundException

这个错误可能是因为包没导入完全,可能是因为AndroidManifest上没写好要启动的类的名字