Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Android中停止线程_Java_Android_Multithreading_Thread Safety - Fatal编程技术网

Java 如何在Android中停止线程

Java 如何在Android中停止线程,java,android,multithreading,thread-safety,Java,Android,Multithreading,Thread Safety,我试图制作一个倒计时计数器,用户点击按钮停止倒计时 我在互联网上搜索了一种方法来停止控制倒计时的线程 我尝试使用中断、中断和停止,但使用任何这些方法都无法成功停止线程 问题: 如何停止控制倒计时计数器的线程 public class Main2Activity extends AppCompatActivity { TextView mTextField; Button stop; Activity myActivity; PrimeThread T1;

我试图制作一个倒计时计数器,用户点击按钮停止倒计时

我在互联网上搜索了一种方法来停止控制倒计时的线程

我尝试使用
中断
中断
停止
,但使用任何这些方法都无法成功停止线程

问题: 如何停止控制倒计时计数器的线程

public class Main2Activity extends AppCompatActivity {

    TextView mTextField;
    Button stop;
    Activity myActivity;
    PrimeThread T1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        myActivity=this;
        mTextField = (TextView) findViewById(R.id.counter);
        T1=new PrimeThread();
        T1.start(); }

    public void stop(View view){   T1.interrupt();    }

    class PrimeThread extends Thread {
        int i=10;
        public void run() {
            while(i>0){
                myActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextField.setText("00:0"+i);
                    }
                });
                i--;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }}}
}

您可以在线程中放置一个标志:

public class Main2Activity extends AppCompatActivity {

    TextView mTextField;
    Button stop;
    Activity myActivity;
    PrimeThread T1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);
        myActivity=this;
        mTextField = (TextView) findViewById(R.id.counter);
        T1=new PrimeThread();
        T1.start(); }

    public void stop(View view){   T1.stopRunning();    }

    class PrimeThread extends Thread {
        int i=10;
        boolean running = false;
        public void run() {
            running = true;
            while(running && i < 10){
                i++;
                myActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        mTextField.setText("00:0"+i);
                    }
                });
                i--;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }

        public void stopRunning(){
            running = false;
        }
    }
}
公共类Main2活动扩展了AppCompative活动{
文本视图mTextField;
按钮停止;
活动我的活动;
引物T1;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
我的活动=这个;
mTextField=(TextView)findViewById(R.id.counter);
T1=新的PrimeThread();
T1.start();}
公共无效停止(视图){T1.stopRunning();}
类PrimeThread扩展线程{
int i=10;
布尔运行=假;
公开募捐{
运行=真;
运行时(运行时(&i<10){
i++;
myActivity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
mTextField.setText(“00:0”+i);
}
});
我--;
试一试{
睡眠(1000);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
}
public void stop running(){
运行=错误;
}
}
}

这将是一个无限循环,我只需要将计数器关闭10秒,用户可以在10秒前停止,也可以在10秒后让它自动停止