如何在Java Android中停止线程?

4
这是我的测试应用程序代码:

public class MainActivity extends Activity
{
    private TextView text;
    private Button start;
    private Button stop;
    private TestThread Points;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        text = (TextView) findViewById(R.id.mainTextView1);
        start = (Button) findViewById(R.id.mainButton1);
        stop = (Button) findViewById(R.id.mainButton2);

        Points = new TestThread();

        start.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View p1)
                {
                    if (! Points.isAlive())
                    {
                        Points.start();
                    }
                }
        });

        stop.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View p1)
                {
                    if (Points.isAlive())
                    {
                        Points.stop();
                    }
                }
            });
    }

    public class TestThread extends Thread
    {
        private String points;

        @Override
        public void run()
        {
            for (int a = 0; a < 3; a++)
            {
                try
                {
                    if (a == 0) points = ".";
                    else if (a == 1) points = "..";
                    else if (a == 2) {
                        points = "...";
                        a = -1;
                    }

                    runOnUiThread(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                text.setText(points);
                            }
                        });

                    Thread.sleep(350);

                } catch (InterruptedException e) {}
            }
        }
    }
}

当我点击“开始”按钮时,线程成功启动,但是当我点击“停止”按钮时,应用程序会崩溃... 如何成功停止线程而不强制关闭?
非常感谢。

1
可能是如何停止线程?的重复问题。 - Marcus
2个回答

4

Thread.stop() 函数已经不建议使用来停止线程。这是根据Java文档

一个好的停止线程的方法是让它退出其run方法。

一种简单的方法是在您的线程类中添加一个布尔成员:

public class TestThread extends Thread
{
    private String points;
    private boolean keepRunning = true;

    public cancel(){
        keepRunning = false;
    }

    @Override
    public void run()
    {
        for (int a = 0; a < 3; a++)
        {
            if(!keepRunning) break;

            try
            {
                if (a == 0) points = ".";
                else if (a == 1) points = "..";
                else if (a == 2) {
                    points = "...";
                    a = -1;
                }

                runOnUiThread(new Runnable()
                    {
                        @Override
                        public void run()
                        {
                            text.setText(points);
                        }
                    });

                Thread.sleep(350);

            } catch (InterruptedException e) {}
        }
    }
}

在您的停止按钮OnClick方法中调用TestThread.cancel()函数。

3

除了添加布尔值来停止线程外,我认为您可以捕获 InterruptException 并调用 Thread.interrupt();这将退出循环并结束线程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接