handler.postdelayed() 毫秒后自动更改 activity onResume()
handler.postdelayed() milliseconds automatically changes after activity onResume()
我在我的应用程序中使用简单的进度条 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
并在 onPause
中调用 cancel
但是,这会在后台线程上运行您的代码,因此您需要一个处理程序来处理 UI 线程上的 post
数据,或者使用 [=37= 的 runOnUiThread
].
另一种选择是使用 Android 的 CountDownTimer
第三种选择是在 onCreate 中删除对 handler.post 的额外调用,只在 onResume
中保留一个
我在我的应用程序中使用简单的进度条 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
并在 onPause
中调用 cancel
但是,这会在后台线程上运行您的代码,因此您需要一个处理程序来处理 UI 线程上的 post
数据,或者使用 [=37= 的 runOnUiThread
].
另一种选择是使用 Android 的 CountDownTimer
第三种选择是在 onCreate 中删除对 handler.post 的额外调用,只在 onResume
中保留一个