WEB开发网
开发学院手机开发Android 开发 Android游戏中的多线程问题 阅读

Android游戏中的多线程问题

 2010-06-29 15:19:00 来源:WEB开发网   
核心提示:this.fireflyView= fireflyView;// 在最开始初始化这个task的时候就把传过来的坐标复制出来用,免得两个线程冲突System.arraycopy(x,0,calculateX,0,FireflyView.MAX_FIREFLY_COUNT);System.arraycopy(y,0,cal

this.fireflyView= fireflyView;

// 在最开始初始化这个task的时候就把传过来的坐标复制出来用,免得两个线程冲突

System.arraycopy(x,0,calculateX,0,FireflyView.MAX_FIREFLY_COUNT);

System.arraycopy(y,0,calculateY,0,FireflyView.MAX_FIREFLY_COUNT);

}

@Override

public void run() {

// 更新坐标,此时应该不影响另一个主线程的draw动作

this.updateXY();

// 坐标更新完了之后把新坐标给主线程复制一份,让他画。

// 不过如果这个时候主线程正在画图的话,这个调用也就只有阻塞了

fireflyView.copyXYArray(bufferX, bufferY);

}

}

问题就是,我觉得应该是第二种方法更好一些,但是第二种方法每次都要对数组进行一次复制,变相又加大了计算量

而且目前这种情况,如果主线程在画图的话,另一个线程还要等着,更新好的数据还是没法传过来的。如果要解决这个问题,就还需要再加一次arraycopy(),这样更加增大了操作。虽然网上搜了下,觉得arraycopy的效率还是挺高的,但是还是想咨询下。

顺便还想了解下,对于多线程的操作究竟怎么样才好呢。

而且,如果使劲想,如果对对象的update太花时间,比如是整个对象draw周期的5倍,就是我们的主线程调用onDraw都画5次了,结果因为对象update太花时间,我们的update连一次都没做完。结果就是主线程五次onDraw画的都是同样的东西(因为没update嘛),那我还不如单线程,等他update完了再画图……就感觉这样看来,两个线程根本就没有意义嘛?除了防止Application not response……

又或者,我们update算起来好快好快,我们在两次onDraw之间,update就已经完成了10次,这样onDraw画出来的东西实际就相当于掉帧掉了10帧,这样想起来,两个线程也没意义嘛……

这样想来,游戏虽然背景音乐啊之类还是需要多线程外,但对于在画面上显示的东西似乎多线程意义不大哦?就是说,如果我单线程来计算你的机器卡的话,我换成多线程计算你的也必然卡,没得悬念得(其实从计算机底层看也似乎确实是这样的嘛(暂时无视多核多CPU))……防Application not response的除外

上一页  1 2 3 4 5 

Tags:Android 游戏 线程

编辑录入:coldstar [复制链接] [打 印]
赞助商链接