1,Unable to execute dex: Multiple dex files define 解决方法
问题发生概述:
将android程序复制运行时,报错Unable to execute dex: Multiple dex files define;Conversion to Dalvik format failed: Unable to execute dex: Multiple dex files define Lcom/kenai/jbosh/AbstractAttr;
具体解决方案如下:
方法一:
Eclipse->Project->去掉Build Automatically->Clear ->Build Project->Build Automatically,关闭Eclipse,再打开(我的问题不是出在这)
方法二:
更新ADT插件,删除workspace目录下的.metadata目录,(这个解决方案没有尝试,因为在开发过程中,我只是更换了一个jar包而出现的错误,而且开发环境不能连网络,不方便尝试)
方法三:
在你的项目下某个文件夹中有一个后缀为*.APK的文件,删掉,重启Eclipse即可。
方法四:
原因是有重复的。jar被引用,可以查看你的build path,尤其是Android Dependencies一定有重复引入的.jar包,解决的方法是在libs删除重复的jar即可。 (我的解决方法)
方法五:
在项目中,有一个类的包名和引用的jar包中的类和包名一致,我用的是jar包中的类,所以工程中的这个类就是重复引用的,删除工程中重复引用的类后,成功打包启动。希望各位同学注意这个小问题
这种情况,测试暂时只会发生在魅族2 手机上,下面这篇文章从代码层调试进行了改动,
http://blog.csdn.net/casun_li/article/details/8966565
我由于用的是别人的sdk所以没有办法改源码,于是求助大牛,用到了以下方法轻松解决了
<application
android:hardwareAccelerated="false" .....
也就是在application标签里面添加了一句android:hardwareAccelerated="false" (禁用硬件加速)
于是问题就解决了,
开始的时候我是加到了对应的activity,标签里面,结果发现第一次可以运行完美等一段时间又会出现这个问题,
改了application,android:hardwareAccelerated="false"于是就好了,
这个问题真是蛋疼,,,不过,希望还有好的解决办法有人分享一下,硬件加速的问题,影响游戏性能
3,解决 - java.lang.OutOfMemoryError: unable to create new native thread
lr vuser过大时,程序报错。java.lang.OutOfMemoryError: unable to create new native thread
Maximum Address Space Per Process | |
Operating System | Maximum Address Space Per Process |
Redhat Linux 32 bit | 2 GB |
Redhat Linux 64 bit | 3 GB |
Windows 98/2000/NT/Me/XP | 2 GB |
Solaris x86 (32 bit) | 4 GB |
Solaris 32 bit | 4 GB |
Solaris 64 bit | Terabytes |
JVMMemory: Heap + PermGen
ReservedOSMemory:Native heap,JNI
在2000/XP/2003的boot.ini里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的线程。
--------------------解决方案--------------------------
参数名称 | 含义 | 默认值 | |
-Xms | 初始堆大小 | 物理内存的1/64(<1GB) | 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. |
-Xmx | 最大堆大小 | 物理内存的1/4(<1GB) | 默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM会减少堆直到 -Xms的最小限制 |
-Xmn | 年轻代大小(1.4or lator) | | 注意:此处的大小是(eden+ 2 survivor space).与jmap -heap中显示的New gen是不同的。 整个堆大小=年轻代大小 + 年老代大小 + 持久代大小. 增大年轻代后,将会减小年老代大小.此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 |
-XX:NewSize | 设置年轻代大小(for 1.3/1.4) | | |
-XX:MaxNewSize | 年轻代最大值(for 1.3/1.4) | | |
-XX:PermSize | 设置持久代(perm gen)初始值 | 物理内存的1/64 | |
-XX:MaxPermSize | 设置持久代最大值 | 物理内存的1/4 | |
-Xss | 每个线程的堆栈大小 | | JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K.更具应用的线程所需内存大小进行 调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右 一般小的应用, 如果栈不是很深, 应该是128k够用的 大的应用建议使用256k。这个选项对性能影响比较大,需要严格的测试。(校长) 和threadstacksize选项解释很类似,官方文档似乎没有解释,在论坛中有这样一句话:"” -Xss is translated in a VM flag named ThreadStackSize” 一般设置这个值就可以了。 |
-XX:ThreadStackSize | Thread Stack Size | | (0 means use default stack size) [Sparc: 512; Solaris x86: 320 (was 256 prior in 5.0 and earlier); Sparc 64 bit: 1024; Linux amd64: 1024 (was 0 in 5.0 and earlier); all others 0.] |
-XX:NewRatio | 年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代) | | -XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5 Xms=Xmx并且设置了Xmn的情况下,该参数不需要进行设置。 |
-XX:SurvivorRatio | Eden区与Survivor区的大小比值 | | 设置为8,则两个Survivor区与一个Eden区的比值为2:8,一个Survivor区占整个年轻代的1/10 |