在uithread睡觉时显示ProgressDialog?

时间:2011-04-29 05:45:53

标签: android

我希望在uithread睡眠时显示ProgressDialog,以便在恢复服务器的数据之前,我的活动将不会显示。我怎么能这样做?

4 个答案:

答案 0 :(得分:1)

您可以使用ThreadAsyncTaskService在后​​台加载数据,并使用Handler实施控制ProgressDialog

The example in this post显示如何使用线程进行登录请求,同时显示进度对话框。

使用AsyncTask更容易,更清晰:

private static final int WAIT = 11;
private final class MyTask extends AsyncTask<Void, Void, Void>
{
    @Override
    protected void onPreExecute()
    {
        super.onPreExecute();
        // Show up the dialog with id=WAIT [11]
        showDialog(WAIT);
        // other actions that must be performed in the UI thread
        // before the background works starts
    }

    @Override
    protected Void doInBackground(Void... params)
    {
        // perform the background work
        return null;
    }

    @Override
    protected void onPostExecute(Void result)
    {
        super.onPostExecute(result);
        // Remove the dialog with id=WAIT [11]
        removeDialog(WAIT);
        // other actions that must be performed in the UI thread
        // after the background works finished
    }
}

[...]

final MyTask task = new MyTask();
task.execute(null);

由于AsyncTask是泛型类型,因此您可以为首选项指定参数类型,因此将数据从ui线程传输到后台线程并返回后非常方便。

您的对话框部分只是您活动中的几行:

private ProgressDialog dialog;

@Override
protected Dialog onCreateDialog(int id)
{
    switch (id)
    {
        case WAIT:
        {
            dialog = new ProgressDialog(this);
            dialog.setMessage("Loading...");
            dialog.setIndeterminate(true);
            dialog.setCancelable(true);
            return dialog;
        }
    }
    return null;
}

答案 1 :(得分:1)

此任务通常通过与进度对话框绑定的AsyncTask来解决。请参阅此article

答案 2 :(得分:0)

将您的网络流程代码移至Thread并获取ProgressDialog。完成网络流程后,通过调用.start();然后ProgressDialog.show();启动网络流程,从ProgressDialog停止HandlerThread.run()

答案 3 :(得分:0)

您可以在ur thread

中尝试使用此代码进行进度拨号

ProgressDialoge pd = ProgressDialog.show(this,“Please wait ...”,“Retriending data。”,true,false);