ProgressDialog.setMessage(String) 不会抛出 IllegalStateException
ProgressDialog.setMessage(String) doesn't throw IllegalStateException
我在下面的代码中从工作线程调用 Progressdialog.setMessage(String)
方法,但是 Android 没有抛出 IllegalStateException
应该说 "java.lang.IllegalStateException: Calling View methods on another thread than the UI thread" 因为我正在修改 UI 来自 UI 线程之外,这在 Android.
中被禁止
这是我的工作线程的可运行对象作为内部 class:
public class HostOnHoldRunnable implements Runnable {
@Override
public void run() {
hostOnHoldDialog.setMessage("Game is on hold because the host paused the app (" + currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
}
}
}
注意:hostOnHoldDialog 是我的 Activity 的 ProgressDialog
成员。
而不是抛出 IllegalStateException
,android 只是不根据消息更新 UI。
这是一个错误吗?
如果我在 Runnable
中使用 runOnUiThread,一切正常,例如
public class HostOnHoldRunnable implements Runnable {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
hostOnHoldDialog.setMessage("Game is on hold because the" +
" host paused the app (" +
currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
}
});
}
}
尝试使用
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
hostOnHoldDialog.setMessage("Game is on hold because the host paused the app (" + currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
}
});
嗯,你看到 Handler
与 Looper
一起工作 运行ning 消息,处理程序 运行s 在 UI 线程上,每个视图都有一个附加到它的处理程序,使它能够在 UI 线程上 post methods/functions,任何新创建的线程想要 运行 消息或 运行 在 UI 线程必须调用一个 Handler 或 Looper.prepare() ,稍后将实现该处理程序。在多线程应用程序中,使用 Handler().post() 或 Handler().postDelayed() 或 View.post() 或 View.postDelayed( ) 或 Context.getMainLooper() 都是帮助你在 UI 线程上 post 的函数,所以如果你用这种方法调用方法,你不会得到异常。所以这里没有问题或错误,只需阅读有关 Looper、Hanlder 和 View
的文档的几行
我在下面的代码中从工作线程调用 Progressdialog.setMessage(String)
方法,但是 Android 没有抛出 IllegalStateException
应该说 "java.lang.IllegalStateException: Calling View methods on another thread than the UI thread" 因为我正在修改 UI 来自 UI 线程之外,这在 Android.
这是我的工作线程的可运行对象作为内部 class:
public class HostOnHoldRunnable implements Runnable {
@Override
public void run() {
hostOnHoldDialog.setMessage("Game is on hold because the host paused the app (" + currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
}
}
}
注意:hostOnHoldDialog 是我的 Activity 的 ProgressDialog
成员。
而不是抛出 IllegalStateException
,android 只是不根据消息更新 UI。
这是一个错误吗?
如果我在 Runnable
中使用 runOnUiThread,一切正常,例如
public class HostOnHoldRunnable implements Runnable {
@Override
public void run() {
runOnUiThread(new Runnable() {
public void run() {
hostOnHoldDialog.setMessage("Game is on hold because the" +
" host paused the app (" +
currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
}
});
}
}
尝试使用
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
hostOnHoldDialog.setMessage("Game is on hold because the host paused the app (" + currentTimeLeftForHostOnHoldTimeOut / 1000 + ")");
}
});
嗯,你看到 Handler
与 Looper
一起工作 运行ning 消息,处理程序 运行s 在 UI 线程上,每个视图都有一个附加到它的处理程序,使它能够在 UI 线程上 post methods/functions,任何新创建的线程想要 运行 消息或 运行 在 UI 线程必须调用一个 Handler 或 Looper.prepare() ,稍后将实现该处理程序。在多线程应用程序中,使用 Handler().post() 或 Handler().postDelayed() 或 View.post() 或 View.postDelayed( ) 或 Context.getMainLooper() 都是帮助你在 UI 线程上 post 的函数,所以如果你用这种方法调用方法,你不会得到异常。所以这里没有问题或错误,只需阅读有关 Looper、Hanlder 和 View