Android 关闭runOnUiThread
我有一个AsyncTask正在运行,在这个线程中我启动了一个runOnUiThread来操作我的视图。如果我关闭AsyncTask,runOnUiThread在我关闭AsyncTask后仍会运行1倍。如何关闭RunNuithRead?谢谢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
@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
和prodivingExecutor
更改和调整此参数。有关更多信息,您需要在线搜索,我还没有这样做。因为我很懒,我通常会选择基本的java线程或RxJava,以防像你这样的情况。