我有一个产生线程的Android服务。这个线程等待网络数据,并且在收到数据后我想显示Ok Cancel Dialogbox。
我得到异常无法创建应该有Looper.prepare()
的句柄。我添加了Looper.prepare()
和Looper.loop()
然后现在我没有得到任何异常,但它无限期等待。
答案 0 :(得分:1)
不使用唯一的线程,最好使用AsyncTask,它也是Android的专用线程。
您可以在AsyncTask的doInBackGround
方法中等待数据,当您收到数据时,可以调用publishProgress()
,这将调用AsyncTask的onProgressUpdate
方法。
在onProgressUpdate
,您可以在不阻塞主线程的情况下更新UI,这也是在网络监听等后台进行长时间操作的首选方式。
检查AsyncTask以获取更多信息以及如何使用它。
http://developer.android.com/reference/android/os/AsyncTask.html
答案 1 :(得分:0)
您可以使用处理程序在非UI线程中调用UI线程(显示警告对话框),如下面的代码
new Thread(new Runnable()
{ public void run()
{
try {
///do your stuff in
mHandlerShowDialog.post(mUpdateShowDialog);
///do your struff
}
} ).start();
final Handler mHandlerShowDialog= new Handler();
final Runnable mUpdateShowDialog = new Runnable() {
public void run() {
// show your dialog here
}
};