我正在开发一款安卓游戏,我刚刚开始,所以要善待你的答案
我有一个surfaceview,它创建了几个我在其上实现了Runnable的类,并且他们从surfaceview接收了holder,这样他们就可以使用画布来更新surfaceview。
问题是,我正在使用holder来锁定和解锁每个类中带有runnable的画布,并且它们都会同时更新UI,这是我不想要的。
现在发生了什么:
12:00:00主题1更新UI
12:00:00主题2更新UI
12:00:01主题1更新UI
12:00:01主题2更新UI
12:00:02主题1更新UI
12:00:02主题2更新UI
我真正想要的是什么:
12:00:00主题1更新UI
12:00:02主题2更新UI
12:00:03主题1更新UI
12:00:07主题2更新UI
12:00:10主题1更新UI
12:00:15主题2更新UI
这些时间只是例子......
如何知道如何在不同时间使用不同的线程来更新surfaceview?
答案 0 :(得分:0)
它正在调用线程同步。如果您的线程想要更新UI,他应该等待另一个线程,如果另一个线程正在更新。你可以搜索android thread synchronization,你会找到你想要的东西;)
关心Hayk Nahapetyan
答案 1 :(得分:0)
您可以使用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/以获取有关消息的更多信息