我有一个ProgressDialog,我无法展示爱情和金钱。一些研究表明我需要把它放在一个主题中。
示例
public void Update(final int ScheduleId, final Context context) {
final Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {
x.dismiss();
}
};
x = ProgressDialog.show(context, "Scheduling...", "Calculating and Storing Dates", true, false);
new Thread() {
public void run() {
// Do Nothing
boolean bResult = UpdateHistory(ScheduleId, context);
Log.i("HERE","Finished Here?");
if (bResult) {
progressHandler.sendEmptyMessage(0);
}
}
}.start();
}
但对我来说似乎发生的一切是,微调器从屏幕上消失,活动结束,而UpdateHistory继续在后台运行。
如果我将调用移到.start()(线程外部)下面的UpdateHistory,我根本不会显示进度微调器。
我错过了什么?
所有这些代码都在一个Activity中。
你能推荐什么,大多数网站似乎都在谈论线程,我已经尝试过你可以做到的每一种方式,正如我所说,我要么让线程在后台运行而且微调器显示一秒钟,或者当函数在前台运行时,我根本没有任何微调器。
由于 西蒙
答案 0 :(得分:1)
首选方法是使用AsyncTask
,但您也应该使用Thread
来执行此操作,如下所示:
public class MyActivity extends Activity {
...
private static final HANDLER_MESSAGE_SUCCESS = 0;
private ProgressDialog x;
...
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case HANDLER_MESSAGE_SUCCESS:
x.dismiss();
default:
Log.w("Handler","handleMessage / Message type not recognised / msg.what = "+String.valueOf(msg.what));
}
}
};
private void backgroundProcess(){
x = ProgressDialog.show(MyActivity.this, "Scheduling...", "Calculating and Storing Dates", true, false);
Thread backgroundThread = new Thread() {
@Override
public void run() {
boolean bResult = UpdateHistory(ScheduleId, MyActivity.this);
Log.i("HERE","Finished Here?");
if (bResult) {
Message msg = Message.obtain();
msg.what = HANDLER_MESSAGE_SUCCESS;
handler.sendMessage(msg);
}
}
};
backgroundThread.start();
}
}