Android 使用AsyncTask类的简单计数器

Android 使用AsyncTask类的简单计数器,android,android-studio,android-asynctask,Android,Android Studio,Android Asynctask,这是一个使用AsyncTask类的简单计数器: static private class AsyncTaskRunner extends AsyncTask<Integer, Integer, Integer> { @Override protected Integer doInBackground(Integer...prams) { while(t){ i++; publishProgress(i)

这是一个使用AsyncTask类的简单计数器:

   static private class AsyncTaskRunner extends AsyncTask<Integer, Integer, Integer> {

    @Override
    protected Integer doInBackground(Integer...prams) {
       while(t){
           i++;
           publishProgress(i);
           try {
               Thread.sleep(200);
           } catch (InterruptedException e) {
               e.printStackTrace();
           }
       }

        return null;
    }


    @Override
    protected void onPostExecute(Integer result) {

    }


    @Override
    protected void onPreExecute() {

    }


    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        Textview.setText(String.valueOf(values[0]));  
    }
}
静态私有类AsyncTaskRunner扩展了AsyncTask{
@凌驾
受保护的整数doInBackground(整数…prams){
while(t){
i++;
出版进度(一);
试一试{
睡眠(200);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
返回null;
}
@凌驾
受保护的void onPostExecute(整数结果){
}
@凌驾
受保护的void onPreExecute(){
}
@凌驾
受保护的void onProgressUpdate(整型…值){
super.onProgressUpdate(值);
Textview.setText(String.valueOf(值[0]));
}
}
我是一个整数,每0.2秒上升一次,它的值显示在Textview中。因此,当我运行我的应用程序时,我会在Textview中显示,并使用asynctask类快速增加和更新。 这是我的问题: 为什么有时我的文本视图显示较小的i值,例如54后显示53,然后再次上升

onProgressUpdate(Progress…),在调用后在UI线程上调用 发表进展(进展…)。执行的时间不确定 未定义。此方法用于显示项目中任何形式的进度 后台计算仍在执行时的用户界面。 例如,它可以用于设置进度条的动画或在中显示日志 文本字段


用户界面线程上的更新时间无法保证,因此您可能会看到事件按照您描述的顺序出现。您可能希望在进度中添加逻辑,以完全不减少值,只增加值,如果值小于上次看到的值,则基本上跳过该值。

有主UI线程和其他工作线程,要使用AsyncTask更新Textview,您应该使用


官方帮助提供了详细的解释和示例,请阅读并尝试修改代码。

您不应该通过异步任务来实现这一点。所有异步任务共享同一个线程,在该线程上睡眠将阻止系统中的任何其他任务。这仅适用于非常短的任务。如果你的计时器永远运行,那么你的应用程序中的其他异步任务将永远无法工作。如果您想要计时器,请使用处理程序或线程,而不是异步任务。

因此我们可以说时间没有保证,但它如何显示变量的先前值?!可能更新时间更长,但无法显示最后一个值…我想你应该假设如果时间不保证,订单可能会受到影响。没关系,兄弟。但你能解释一下我是如何收到较小的I变量值的吗?它是如何发生的?我必须看到相等或更高的值,因为没有减少它的命令!