我的应用程序执行繁重的任务,因此我想向用户显示进度栏并在后台运行任务,以便用户可以了解其加载情况。 当后台任务完成时,隐藏进度栏。 但是进度条不应花费相同的时间达到最大值,而应取决于用户的输入或处理。
答案 0 :(得分:1)
使用AsyncTask
。 AsyncTask
是在Android中实现并行性的最简单方法之一,而无需处理诸如Threads之类的更复杂的方法。尽管它提供了与UI线程基本的并行度,但不应将其用于更长的操作(例如,不超过2秒)。
AsyncTask
有四种方法可以完成任务:
onPreExecute()
doInBackground()
onProgressUpdate()
onPostExecute()
检查link了解更多详细信息。
答案 1 :(得分:0)
您可以创建类似的内容,该过程将在30秒内结束。希望对您有用
private ProgressDialog progressDialog;
public void init() {
progressDialog = new ProgressDialog(context);
progressDialog.setCancelable(false);
progressDialog.setMessage("please wait");
progressDialog.show();
new Thread(new Runnable() {
@Override
public void run() {
while (time < 30) {
try {
Thread.sleep(1000);
Message message = new Message();
message.what = UPDATE_PROGRESS;
handler.sendMessage(message);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Message message = new Message();
message.what = END_PROGRESS;
handler.sendMessage(message);
}
}).start();
}
private static final int UPDATE_PROGRESS = 1;
private static final int END_PROGRESS = 2;
private int time;
private Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_PROGRESS:
progressDialog.setMessage("Time: " + time++);
break;
case END_PROGRESS:
progressDialog.dismiss();
break;
default:
break;
}
return true;
}
});
更新 这是线程和处理程序的示例。但是您也可以创建一个asynctask