[英]how to update views with two concurrent threads Android
我有角色和怪物,並想模擬一場戰斗。 為此,我創建了兩個線程,一個線程攻擊角色,另一個攻擊怪物。 角色和怪物的攻擊速度不同,因此它們的線程“等待”時間將不同。 我的方法如下所示(我對方法進行了總結):
public void attack(){
//Character's attack thread
Thread characterAttackThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while(character.getHp()>0 && monster.getHp()>0){
int damage = character.getDamage();
monster.setHp(monster.getHp() - damage);
Thread.sleep(character.getSpeed());
}
if(character.getHp()<=0){
updateScreen("Character died"); //shows message to user
}else{
updateScreen("Monster died"); //shows message to user
}
} catch (Exception e) {
e.printStackTrace();
}
}
});
//Monster's attack thread
Thread monsterAttackThread = new Thread(new Runnable() {
@Override
public void run() {
try {
while(character.getHp()>0 && monster.getHp()>0){
int damage = character.getDamage();
monster.setHp(monster.getHp() - damage);
this.wait(character.getSpeed());
}
Thread.sleep(monster.getSpeed());
} catch (Exception e) {
e.printStackTrace();
}
}
});
characterAttackThread.start();
monsterAttackThread.start();
}
但是當我到達updateScreen("Message");
我得到錯誤
Only the original thread that created a view hierarchy can touch its views.
我該怎么做才能解決問題?
提前致謝!
您無法從UI線程以外的任何其他線程修改android工具包
該鏈接將給您澄清:
http://developer.android.com/guide/components/processes-and-threads.html
您可以執行以下操作之一:
在您的線程中使用以下代碼:
MainActivity.this.runOnUiThread(new Runnable() {
公共無效run(){
Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); }
});
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.