0

我有一个 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 继续在后台运行。

如果我将对 UpdateHistory 的调用移到 .start() 下方(线程外部),则根本不会显示进度微调器。

我到底错过了什么?

所有这些代码都在一个活动中。

你能推荐什么,大多数网站似乎都在谈论线程,我已经尝试过尽你所能,正如我所说,我要么让线程在后台运行,然后显示一秒钟的微调器,要么我当函数在前台运行时,根本没有微调器。

谢谢西蒙

4

1 回答 1

1

首选方法是使用 a AsyncTask,但您也应该能够使用 a 来做到这一点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();
    }
}
于 2011-01-25T23:16:25.617 回答