令人困惑的结果...我有5个ProgressBars处于正常工作状态。
但是一段时间后,UI几乎停滞了。
如何确定我的5个progressBar的处理程序在到达progressBars MAX之后退出?
以下是我活动中进度条之一的示例。
public void doProgressBarA() {
maskBar4 = (progBar) child2.findViewById(R.id.fragmentB_progressBar4);
new Thread(new Runnable() {//Start long running op in background thread
public void run() {
final SharedPreferences nnn = getSharedPreferences("com.blagmyname.app", MODE_PRIVATE);
int spRateValue = nnn.getInt("current_name_number", 0);
while (m4progressStatus < spRateValue) {
m4progressStatus += 3;
// Update the progress bar and display the current value in the text view
mask4handler.post(new Runnable() {
public void run() {
maskBar4.setProgress(m4progressStatus);
}
});
try { // Sleep for 20 ms to display the progress slowly
Thread.sleep(8);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
////////////////////////////////////////////////////////////////////////////
最佳答案
Aysynctask非常适合这种情况。但是,在aysynctask中,您将无法从那里更新GUI。方法doInBackground
完成后,您将更新GUI。
我说aysynctask在这种情况下很完美的原因是因为onProgressUpdate()
方法。您可以通过它更新进度条。要使用aysynctask,只需在对象上调用.execute()
方法。然后,将调用AysyncTask类。您将需要创建此类,并将至少一个AysyncTask方法放入:
www.willcode4food.net
注意图中的onProgressUpdate
方法。从那里,您可以更新进度条,该进度条甚至不需要经常更新:
xsun.info
我强烈建议您查看android文档和在线获取aysynctask的示例。这并不困难,只需将线程内容复制并粘贴到另一个asyncTask类中即可。
看这个:
http://developer.android.com/reference/android/os/AsyncTask.html