0

我有一个 Android 应用程序,它使用 RPC 机制来设置/从服务器获取信息。我从主线程(阻塞)中调用 RPC,我希望它们被阻塞。但是,有时通话可能会持续几秒钟,我想在指定时间(例如 1 秒)后显示一个不确定的进度对话框。

我试图生成一个新线程来进行调用,并且主线程在循环中等待(带有睡眠),直到调用完成。在这个循环中,我显示了进度对话框,但这不起作用。

是否可以在另一个线程中显示和更新进度对话框,或者有人知道允许我使用阻塞调用的更好解决方案吗?

4

3 回答 3

0

尝试使用AsyncTask. 它是一种用于进行此类网络调用的 android 机制。在此处获取简要说明AsyncTask

尝试 SSH 到服务器时使用 AsynTask 显示进度条

使用 aAsyncTask您可以阻止用户继续前进。您必须progress dialogonPreExecute(). AsyncTask您所有与网络相关的活动都将在doInBackground(). 后台操作完成后,将调用onPostExecute()progress dialog被解雇的位置。

AsyncTask是一个异步调用,因为您有 2 个线程同时工作,一个是显示进度对话框的 UI 线程,另一个是从服务器获取数据的非 UI 后台线程。

希望这个解释有所帮助。

于 2012-06-25T15:32:40.793 回答
0

你不能同时做这两个,让主线程在一个循环中等待并显示一个进度对话框。主线程等待或显示对话框。

为什么要阻塞主线程?互联网上的通信应始终在后台线程中完成,因为您永远不知道完成需要多长时间。做这些事情AsyncTask并在 main.js 中显示进度对话框。

于 2012-06-25T15:38:07.663 回答
0

我找到了一个似乎可行的解决方案(至少我还没有注意到任何问题)。我知道正确的方法是使用 AsyncTask 之类的东西,但就我而言,我没有从中受益,而且它使程序逻辑复杂化。

要在新线程中更新 UI:

    new Thread() 
    {
        public void run()
        {
            Looper.prepare();
            ... do UI stuff here
            Looper.loop();
        }
    }.start();
于 2012-06-25T16:00:46.237 回答