簡體   English   中英

如何使用兩個並發線程更新視圖

[英]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

您可以執行以下操作之一:

  1. 使用AsyncTask並從onPostUpdate()函數更新UI
  2. 在UI線程中編寫處理程序,然后從您的線程向其發送消息
  3. 在您的線程中使用以下代碼:

     MainActivity.this.runOnUiThread(new Runnable() { 

    公共無效run(){

      Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show(); } 

    });

希望這可以幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM