我正在开发一个android游戏,我才刚刚开始,所以请友好地回答我的问题
我有一个表面视图,它创建了几个类,我已经在它们上实现了Runnable,它们从表面视图接收holder,这样它们就可以使用画布来更新表面视图。
问题是,我使用holder和runnable在每个类中锁定和解锁画布,它们都同时更新UI,这是我不想做的事情。
现在发生的事情:
12:00:00线程1更新UI
12:00:00线程2更新UI
12:00:01线程1更新界面
12:00:01线程2更新界面
12:00:02线程1更新界面
12:00:02线程2更新界面
我真正想要的是:
12:00:00线程1更新UI
12:00:02线程2更新界面
12:00:03线程1更新界面
12:00:07线程2更新界面
12:00:10线程1更新UI
12:00:15线程2更新UI
这些时间只是一些例子。
你知道如何使用不同的线程在不同的时间更新surfaceview吗?
发布于 2012-12-13 20:02:19
它正在调用线程同步。如果你的线程想要更新UI,他应该等待另一个线程,如果另一个线程正在更新。你可以搜索android thread synchronization,你会找到你想要的;)
问候海克·纳哈佩特扬
发布于 2012-12-13 20:59:21
您可以使用HandlerThread从线程中获取要完成的更新。它的工作原理如下:
Private final HandlerThread inboxHandlerThread;
Private final Handler inboxHandler;
public void onCreate(){
inboxHandlerThread = new HndlerThread("inbox");
inboxHandlerThread.start();
inboxHandler = new Handler(inboxHandlerThread.getLooper()){
@Override
public void handleMessage(Message msg){
UIActivity.this.handleMessage(msg);
}
}
}
public final boolean handleMessage(Message msg){
switch(msg.what){
case UPDATE_Thread1:
someObject.setValue(msg.arg1);
break;
case UPDATE_Thread2:
anotherObject.setValue(msg.arg1);
break;
}
}你只需通过Message.obtain(Handler inboxHandler, int what, int arg1, int agr2).sendToTarget()发送一条消息
另请查看http://mindtherobot.com/blog/675/android-architecture-message-based-mvc/,了解有关消息的更多信息
https://stackoverflow.com/questions/13859362
复制相似问题