gpt4 book ai didi

android - handler.postdelayed() 毫秒在 Activity onResume() 后自动更改

转载 作者:行者123 更新时间:2023-11-30 00:14:15 25 4
gpt4 key购买 nike

我在我的应用程序中使用简单的 progressBar 和 handler.postdelayed 来更改条值(恒定时间)并且初始条值是 100。

Handler progress_handler;
Runnable runnable;
ProgressBar bar;
int progress;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bar= (ProgressBar) findViewById(R.id.progressBar);
progressBar();
}

private void progressBar()
{
progress_handler = new Handler();
runnable = new Runnable()
{
@Override
public void run() {

progress=bar.getProgress();
if(progress<=0)
{
progress_handler.removeCallbacks(runnable);

}
else {
bar.setProgress(progress - 1);
progress_handler.postDelayed(runnable, 50); // 50 milliseconds here

}
}
};
// Start the Runnable immediately
progress_handler.post(runnable);

}

这是完美的,但当我暂停并恢复 Activity 时会出现问题

 @Override
protected void onPause() {
super.onPause();
progress_handler.removeCallbacks(runnable);
}

protected void onResume() {
super.onResume();
progress_handler.post(runnable);
}

现在进度条速度不是 50 毫秒,因为我设置它比较慢..发生了什么事?

最佳答案

如果你想让你的进度不断减少,你需要使用一个Timer而不是 Handler

Timer.scheduleAtFixedRate(TimerTask task, long delay, long period)

在哪里task基本上是你的 Runnable

您可以在 onCreate 中创建所有内容,并在 Activity 的 onResume() 中调用scheduleAtFixedRate并调用cancelonPause

但是,这会在后台线程上运行您的代码,因此您需要一个处理程序来处理 post UI 线程上的数据,或使用 runOnUiThread的 Activity 。

另一种选择是使用 Android 的 CountDownTimer

第三种选择是在 onCreate 中删除对 handler.post 的额外调用,只在 onResume 中保留一个

关于android - handler.postdelayed() 毫秒在 Activity onResume() 后自动更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47577266/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com