java - 在 Android 应用程序中使用处理程序的 ProgressBar 倒计时

标签 java android time progress-bar handler

我首先想说的是,我经常使用谷歌来找到一个进度条,它会随着时间的流逝自动填充。我在使用线程 或使用Asynctask 时找到的所有结果。作为 Android 的新手,我认为使用额外的 Handler 来处理进度条的更新更容易完成。

但是,我没有发现任何人按照我的方式进行。它可能违反Android规则吗?例如,我可以同时使用多个 Handlers 吗?

我的代码如下:

public void restarttimebar()
{
    stoptimebar();
    for(int i=1;i<12;i++)
    {
    Message msg = timebarhandler.obtainMessage(0,i,0);
    timebarhandler.sendMessageDelayed(msg, i*250);
    }

};

public void stoptimebar()
{
    timebarhandler.removeMessages(0);
    Message msg = timebarhandler.obtainMessage(0,0,0);
    timebarhandler.sendMessage(msg);
};

Handler timebarhandler = new Handler()
{
    @Override
    public void handleMessage(Message msg)
    {
        ProgressBar progressbar = (ProgressBar)findViewById(R.id.timebar);
        if (msg.arg1 == 0)
        {
            progressbar.setProgress(0);
        }
        if (msg.arg1 > 0)
        {
            progressbar.setProgress(msg.arg1*9);
        }
    }
};

现在可以调用 restarttimebar(); (重新)启动进度条。它将以每 0.25 秒的增量填充超过 3 秒。非常感谢任何评论!!

编辑: 还添加了一个 stoptimebar();只是停止进度条。此外,进度条的标准大小是 100。所以我只需将 12 次更新乘以 9。它几乎是 100 ;) 在我的应用程序中进度条不必非常精确。

最佳答案

据我所知,您创建的线程和 Asynctasks(非 UI 线程)不应像您的进度条那样触及 UI 内容。如果您需要任务与进度条通信,请使用 Asynctask 并确保与 UI 相关的操作在 onPostExecute() 中完成。此方法也将由主 UI 线程调用。

关于java - 在 Android 应用程序中使用处理程序的 ProgressBar 倒计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712414/

相关文章:

Java 8 ZoneOffset - 如何获取当前系统 UTC 偏移量

java - org.glassfish.json.JsonStringImpl 无法转换为 javax.json.JsonArray

java - Java中检查两个三位数是否有相同的数字

android - 停止安卓服务

php - 使用 ics 日期/时间格式在 php 中管理时区

python - 两个循环之间耗时

java - 文件删除/移动失败

java - java中如何在每一行的末尾连接一个字符串?

android - onclick 仅在点击三下后触发

android - 从 Play 商店获取错误 - “This app is incompatible with all of your devices.”