[英]Android: One ProgressBar with two AsyncTask
我有兩個AsyncTasks( MainActivity
子類),它們可以同時下載一些數據。 他們被稱為
new LoadData(url).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
我希望他們倆都更新一個ProgressBar
但我想不出一種方法, setProgress
從兩個同時執行的線程中進行setProgress
,以便每個線程貢獻進度的50%。
public class MainActivity extends Activity {
private static double staticvariable = 0;
private ProgressBar progbar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progbar = (ProgressBar) findViewById(R.id.progressBar1);
new LoadData("http://stackoverflow.com")
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
new LoadData("http://stackoverflow.com")
.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
private class LoadData extends AsyncTask<String, Void, String> {
private String weburl;
public LoadData(String url) {
this.weburl = url;
System.out.println("Starting Download");
}
protected String doInBackground(String... params) {
System.out.println("point 1");
URLConnection conn = null;
URL url = null;
try {
url = new URL(weburl);
conn = url.openConnection();
conn.connect();
InputStream in = null;
in = new BufferedInputStream(url.openStream());
int fileSize = conn.getContentLength();
double taskProgress;
int count;
byte buffer[] = new byte[1024];
while ((count = in.read(buffer)) != -1) {
taskProgress = 50 * ((double) count) / ((double) fileSize);
staticvariable += taskProgress;
progbar.setProgress((int) staticvariable);
}
in.close();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("finished at " + (int) staticvariable + "%");
return null;
}
}
}
我認為解決方案在於使用如上所述通過count/fileSize
自身遞增的靜態變量,但是我得到了一些奇怪的結果。 在每次下載結束時,我將完成百分比打印到控制台上,我得到:
完成於916%
和
完成於926%
我不知道這些數字是從哪里來的。 有任何想法嗎?
編輯僅運行一個AsyncTask輸出:
完成了447%
這很簡單(不包含代碼,僅包含算法):
附帶說明一下,要使其達到完美,您可能需要在開始實際工作之前將最大進度設置為每個最大值的總和。 但是,這是一個旁注,可以丟棄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.