当前界面有显示下载进度的ProgressBar,请写一个下载线程,以10s的时间完成ProgressBar其进度显示工作;
final ProgressBar progressBar=new ProgressBar(this); progressBar.setMax(10); progressBar.setProgress(0); final Handler handler1 = new Handler(){ public void HandlerMessage(Message msg){ int x=msg.what; progressBar.setProgress(x); } }; new Thread(new Runnable(){ public void run() { for(int i=1;i<=10;i++){ try { Thread.sleep(1000); } catch(Exception e){ e.printStackTrace(); } handler1.sendEmptyMessage(i); } } }).start();
主要思路是通过,在主线程中显示进度条,然后通过开启子线程来模拟耗时操作,并且设置耗时操作时间为10s,并且在耗时操作进行完毕之后取消正在显示的进度条。主要代码如下。
/** * 显示进度条 */ public void showProgressDialog() { ProgressDialog progressDialog = new ProgressDialog(ShowProgressBarActivity.this); progressDialog.setTitle("正在下载"); progressDialog.show(); new Thread(new Runnable() { @Override public void run() { for (int showTime = 0; showTime < 10; showTime++) { try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } progressDialog.dismiss(); } }).start(); }
}
是用另一个任务来计算当前下载量,ProgressBar 接收当前下载进度,并显示 import java.text.DecimalFormat; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /** * Created by WZW on 2017/08/08. * 当前界面有显示下载进度的ProgressBar,请写一个下载线程,以10s的时间完成ProgressBar其进度显示工作; */ public class Main { public static void main(String args[]){ Thread thread=new Thread(new ProgressBar()); thread.start(); } } class CalauteNow implements Callable<Integer>{ static int now=0; @Override public Integer call() throws Exception { Thread.sleep(1000); now+=10; return now; } } class ProgressBar implements Runnable{ int now=0; @Override public void run() { try { while (now <= 100) { Double persent = (now * 1.0 / 100.0) * 100; DecimalFormat decimalFormat=new DecimalFormat("0.00"); System.out.print("\r完成度:" + decimalFormat.format(persent) + "% "); for (int i = 0; i < persent / 5; i++) { System.out.print(">"); } CalauteNow calauteNow = new CalauteNow(); FutureTask<Integer> task = new FutureTask<Integer>(calauteNow); Thread thread = new Thread(task); thread.start(); now = task.get(); } }catch (InterruptedException e){ e.printStackTrace(); }catch (ExecutionException e){ e.printStackTrace(); } } }