我试图在AsyncTask
的doInBackground中调用一个函数,该函数在progressBar中淡入淡出。每当我调用此函数时,进度条会根据需要淡入然后消失。我在最后添加了一个检查,告诉我,GONE
方法完成后,进度条的可见性已返回runOnUIThread
:
重置程序去掉
为什么会这样,我怎样才能使进度条保持可见?
我一直在使用以下内容:
@TargetApi(12)
private void fadeInProgressBar(final int time, ProgressBar prog){
System.out.println("MainActivity: Fading In ProgressBar");
runOnUiThread(new Runnable(){
@Override
public void run() {
if(usingHigherApiThan(12)&&prog.getVisibility()==View.GONE){
prog.setVisibility(View.VISIBLE);
if(prog.getAlpha()<1){
prog.animate().setDuration(time).alpha(1);
}
}else if(prog.getVisibility()==View.GONE){
prog.setVisibility(View.VISIBLE);
final AlphaAnimation animation = new AlphaAnimation(0F, 1F);
animation.setDuration(time);
animation.setFillAfter(true);
prog.startAnimation(animation);
}
}
});
if(prog.getVisibility()==View.VISIBLE){
System.out.println("Left Prog Visible");
}else{
System.out.println("Reset Prog To Gone");
}
}
注意usingHigherApiThan(12)
只检查构建版本是否为12或更高版本,对于12以上和11以下都会出现此问题。
答案 0 :(得分:1)
您不需要,也可能不应该这样做。 AsyncTask
已经在UI
线程上运行的方法(除doInBackground()
之外的所有线程)
将您要在UI
上运行的代码放入onPostExecute()
,以便在doInBackground()
完成时运行。
如果它更符合您的需求,您也可以将代码放入onProgressUpdate()
并在需要时使用publishProgress()
调用此函数。
或者,如果您只需要在任务开始时运行它,那么您可以将它放在onPreExecute()
中。所有这些都在UI Thread
上运行。没有必要使用runOnUiThread()
添加额外的步骤。