Android - ProgressDialogs和Threads

时间:2011-01-25 22:57:06

标签: android multithreading progressdialog

我有一个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中。

你能推荐什么,大多数网站似乎都在谈论线程,我已经尝试过你可以做到的每一种方式,正如我所说,我要么让线程在后台运行而且微调器显示一秒钟,或者当函数在前台运行时,我根本没有任何微调器。

由于 西蒙

1 个答案:

答案 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();
    }
}