0

我的目标是 Android 4.0,并且正在使用 TCP/IP 与遥测设备进行通信。Android 4.0 强制所有网络在单独的线程中完成。首先我打开一个套接字,然后我联系设备并从一个单独的线程下载一些信息。此时我想显示一个进度对话框,以显示下载更详细信息的进度。我的问题是除了主 UI 之外,我无法从任何地方显示进度对话框。但是,我不知道我何时到达了另一个线程中准备显示进度对话框的位置。有什么方法可以在不占用系统的情况下从主 UI 进行检查?

4

3 回答 3

1

像这样使用处理程序:

final int PROGRESS_BY = 1;

    final Handler handler = new Handler()
    {
        public void handleMessage(android.os.Message msg) 
        {
            switch (msg.what)
            {
                case PROGRESS_BY :
                    progressBar.setProgress((Integer) msg.obj);
                    break;
            }
        }
    };

    Thread thread = new Thread()
    {
        @Override
        public void run() 
        {
            super.run();
            // do something
            Message msg = new Message();
            msg.what = PROGRESS_BY;
            msg.obj = new Integer(10);
            handler.sendMessage(msg);
            // do something
            [...]
        }
    };
于 2012-07-24T15:28:28.450 回答
1

AsyncTask是框架提供的实用程序,适用于您描述的情况。从另一个线程,即正在执行异步任务的线程,您可以使用publishProgressAsyncTask 的 () 方法发布进度。它是异步的并在不同的线程上运行,但具有在主线程上运行的事件回调。OnProgressUpdate() 是您可以使用进度对话框的方法。

http://developer.android.com/reference/android/os/AsyncTask.html

于 2012-07-24T15:32:06.557 回答
0

要在主 ui 上触发对话框,您需要使用“context.runOnUiThread()”,其中 context 是对显示活动的引用。使用 AsyncTask 也值得研究。

这是一篇 android 博客文章,详细解释了所有内容:http ://android-developers.blogspot.ca/2009/05/painless-threading.html

顺便说一句,您也可以从一开始就开始显示一个不确定的进度对话框,因此用户永远不会在没有视觉反馈的情况下等待,然后在您知道下载详细信息时切换到确定的进度。

于 2012-07-24T15:24:08.180 回答