Android 关闭runOnUiThread

Android 关闭runOnUiThread,android,android-asynctask,android-runonuithread,Android,Android Asynctask,Android Runonuithread,我有一个AsyncTask正在运行,在这个线程中我启动了一个runOnUiThread来操作我的视图。如果我关闭AsyncTask,runOnUiThread在我关闭AsyncTask后仍会运行1倍。如何关闭RunNuithRead?谢谢 @Override protected String doInBackground(String... params) { while(running.get()) { // Background thread sleeps

我有一个AsyncTask正在运行,在这个线程中我启动了一个runOnUiThread来操作我的视图。如果我关闭AsyncTask,runOnUiThread在我关闭AsyncTask后仍会运行1倍。如何关闭RunNuithRead?谢谢

@Override
protected String doInBackground(String... params) {
    while(running.get()) {

        // Background thread sleeps
        try {
            Thread.sleep(produceRadwaste_countdown * 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // UI thread touching some view elements
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                radwasteTon.incrementStack();
            }
        });

        // Delete thread if player is game over
        if(GameLogic.isGameOver()) {
            clearThreads();
        }
    }

    return "Running";
}

public void clearThreads() {
    running.set(false);
    this.cancel(true);
}

我可以提出不同的解决方案吗

在AsyncTask中实现onProgressUpdate(Params…)方法。然后您可以从doInBackground(Params…)调用PublishProgress


onProgressUpdate(参数…)将在ui线程上运行。

谢谢它在ui上运行,我不需要runOnUiThread,但在我取消线程后它仍运行1次好的,我用logcat检查了整个过程,这有点奇怪,因为有时他执行publishProgress()在他检查布尔值之前,有时他在执行publishProgress()之前检查布尔值。现在我正在做一个小线程。在这两个操作之间进行睡眠,它可以工作,但我认为这不是最好的解决方案。我了解到AsyncTask有一个最大池大小,这对我的游戏来说是一件非常糟糕的事情,因为这个线程将在每个游戏图标上运行,我将有大约5-10个项目。取决于Android版本,AsnycTask可能有5个或只有1个线程池大小。您可以使用方法
executeOnExector
和prodiving
Executor
更改和调整此参数。有关更多信息,您需要在线搜索,我还没有这样做。因为我很懒,我通常会选择基本的java线程或RxJava,以防像你这样的情况。