0

我有这个项目,有 2 个课程。activity_main 有 2 个按钮,button1 运行一个线程,我想用 button2 停止它,但它不起作用,因为在线程运行时 button2 是不可点击的。最后 AVD 停止程序。请问,有什么建议???

提前谢谢。

activity_main.xml

<Button
   android:id="@+id/button1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="gestionbotones"
   android:text="Thread ON" />
<Button
   android:id="@+id/button2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="gestionbotones"
   android:text="Thread OFF" />

MainActivity.java

public class MainActivity extends Activity {
.......
private HiloJuego hj = new HiloJuego();
.......
public void gestionbotones (View v){
    int id = v.getId();
    switch(id){
    case R.id.button1 :
        Log.d(TAG, "Thread activado");
        hj.setRunning(true);
        hj.setTurno(true);
        hj.run();
        break;
    case R.id.button2:        //    Desactivar
        hj.setRunning(false);
        Log.d(TAG, "Thread destruído");
       break;
    default:
        break;
    }
}

HiloJuego.java

package com.example.tocatoca1;
import android.util.Log;
public class HiloJuego extends Thread {  
    private static final String TAG = HiloJuego.class.getSimpleName();

    private boolean running;
    private boolean turno;
    public void setRunning(boolean running) {
        this.running = running;
    }
    public void setTurno(boolean turno){
        this.turno=turno;
    }
    public HiloJuego() {
        super();
    }
    @Override
    public void run() {
        Log.d(TAG, "Starting game loop");
    while (running) {
        if (turno){
                Log.d(TAG, "Turno Ordenador");
        } else{
            Log.d(TAG, "Turno Jugador");
        }
    }   // end finally
}
}
4

1 回答 1

1

Thread要在单独的线程中运行实例,它是Thread#start(),而不是Thread#run()Thread#run()不会创建一个新线程,而只是run()在当前线程中运行(这是 UI 线程,这就是你得到 ANR 的原因)。

此外,实现 Runnable 比扩展 Thread 更好

于 2013-04-30T14:57:04.287 回答