我的目标是 Android 4.0,并且正在使用 TCP/IP 与遥测设备进行通信。Android 4.0 强制所有网络在单独的线程中完成。首先我打开一个套接字,然后我联系设备并从一个单独的线程下载一些信息。此时我想显示一个进度对话框,以显示下载更详细信息的进度。我的问题是除了主 UI 之外,我无法从任何地方显示进度对话框。但是,我不知道我何时到达了另一个线程中准备显示进度对话框的位置。有什么方法可以在不占用系统的情况下从主 UI 进行检查?
问问题
155 次
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
是框架提供的实用程序,适用于您描述的情况。从另一个线程,即正在执行异步任务的线程,您可以使用publishProgress
AsyncTask 的 () 方法发布进度。它是异步的并在不同的线程上运行,但具有在主线程上运行的事件回调。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 回答