本人是.net 开发者,转来android 玩玩。以前也做过PPC的开发,我写的PPC程序虽然是.net的公共言语库开发的,相比之下:android 程序的执行效率简值一败涂地。怎么说?我之前用PPC写过一个连连看的小游戏,运行还算流畅,在05年的机子,CPU好象是500。是7*7宫格的=49,没用上数据库。但现在用java+SQLite 写android 程序,是一个万年历小程序,6*7=42宫格,真他妈的慢,机子CPU还超到了1G了。想了一下,看人家的万年历程序,但速度比我的快很多,就想不明白。就查了一下,原来用C来写库,用java 调用,提高效率。我晕。。还有不明白,我用手机调试时,一步步跟到代码的最后一步都跟完了,显示还没有更新上来,我晕。这是什么问题?是我的程序有问题?我开多了一条线程去更新界面,但效果不大。。如果这样android程序要用上四核的机子才能流畅了。。太晕了真是的java的执行效率问题吗?

解决方案 »

  1.   

    不要使用View去更新,这种频繁的刷新最好使用SurfaceView,这个组件专门用于刷新大批数据,而如果使用View的话,会造成LZ的问题
      

  2.   

    按理说真没慢的话,系统会出现ANR的,不知道你的设计思路是什么
      

  3.   

    java的执行效率问题,你不必纠结!已有定论
      

  4.   

    如果用: SurfaceView 来做的话,也不太好。因为每一个 SurfaceView都用一个线程来控制,如果用一个来画的话,是可以,但难度太高了。6*7=42宫格。。
      

  5.   

    05年的机器,cpu有500不会吧,那个时候还都在 195MHz或220MHz,就是当时的Intel scale好像最高的才是416吧,你的那个逻辑比较简单,跑的卡绝对是代码问题,我们搞3D游戏的,运算比你这个复杂多了。
      

  6.   

    楼主也改成C来实现,通过jni调用试试。
      

  7.   

    其实42宫格内面还有4个TextView,这样一来,就是42*4=168个对像,+每个宫内面一个LinearLayout,这样就有42=168=210个对像,这样会慢吧?
      

  8.   

    我在想如果用SurfaceView来画一个宫,是可以,但我每个宫也要响应事件,这样一来,我起不是要创建42条线程?这样会更惨吧,请给点建议。
      

  9.   

    据我所知,万年历生成的时候麻烦些,(只是麻烦,运算量应该不是特别大),如果要将数据映射到一个view上应该花不了太多时间。 另外为什么每个宫都响应事件就需要42个线程了呢?
      

  10.   

    SurfaceView是采用双缓冲机制的
    你说的宫是什么意思,是一个格子吗,为啥要一个线程呢,线程专门搞一个或两个刷新动画就够了
    42个这也太多了,42个干相同的事吧,连连看推箱子都是宫格类,哪用的了那么多线程,就一个线程足够了
    开动作类游戏都差不多了,很卡是对图片没处理好,要缓存,更要注意内存的使用
    想fps高点,直接上引擎,精灵重力系统物理碰撞都很给力的
      

  11.   

    谢谢,我已经用SurfaceView,画出来了。速度快多了。事件onTuch可以判断RectF的区域是否在42宫中其中一个,这样很方便的处理事件了。但,我想自定义一个自己的事件,并在类的内部激发事件,请问如何处理?