Android N秒后从RunOnUiThread中取消自定义对话框
我有一个自定义对话框,它由以下代码创建:Android N秒后从RunOnUiThread中取消自定义对话框,android,multithreading,dialog,xamarin.android,android-alertdialog,Android,Multithreading,Dialog,Xamarin.android,Android Alertdialog,我有一个自定义对话框,它由以下代码创建: public DialogFragment CreateNewPostedMessageDialog(CardSwipeData data, List<MessagesMap> messagesMap, string fbProfileimageAsByteString, Context context) { DialogFragment newFragment =
public DialogFragment CreateNewPostedMessageDialog(CardSwipeData data,
List<MessagesMap> messagesMap,
string fbProfileimageAsByteString,
Context context) {
DialogFragment newFragment =
new NewPostedMessageDialogFragment(data, messagesMap,
fbProfileimageAsByteString,
context);
return newFragment;
}
我想在3秒钟后关闭对话框,但实际情况是,我的对话框从未显示,但我的列表在3秒钟后仍会更新。我的睡眠有什么问题吗?因为
runOnUiThread
在UI线程上运行
Thread.Sleep(3000);
阻止UI线程3秒钟,使UI无响应。如果要在三秒后关闭对话框,可以使用处理程序类中的postDelayed()
:
Declare an Handler handler = new Handler();
然后,在runOnUiThread
中更改您发布的代码:
{
final DialogFragment dialog = CreateNewPostedMessageDialog(cardSwipeData,
messagesMap, bitmapByteString, this);
dialog.Show(FragmentManager, "PostedMessage");
// ListAdapter gets updated here
handler.postDelayed( new Runnable() {
@Override
public void run() {
dialog.Dismiss();
}
}, 3000) ;
});
检查输入错误,因为
runOnUiThread
在UI线程上运行
Thread.Sleep(3000);
阻止UI线程3秒钟,使UI无响应。如果要在三秒后关闭对话框,可以使用处理程序类中的postDelayed()
:
Declare an Handler handler = new Handler();
然后,在runOnUiThread
中更改您发布的代码:
{
final DialogFragment dialog = CreateNewPostedMessageDialog(cardSwipeData,
messagesMap, bitmapByteString, this);
dialog.Show(FragmentManager, "PostedMessage");
// ListAdapter gets updated here
handler.postDelayed( new Runnable() {
@Override
public void run() {
dialog.Dismiss();
}
}, 3000) ;
});
检查打字错误你做错了什么,是你在睡UI线程,而不是你在
踏板池
中产生的后台线程。请尝试以下方法:
ThreadPool.QueueUserWorkItem(state => {
// Processing stuff here
DialogFragment dialog;
RunOnUiThread(() => {
dialog = CreateNewPostedMessageDialog(cardSwipeData,
messagesMap, bitmapByteString, this);
dialog.Show(FragmentManager, "PostedMessage");
});
// ListAdapter gets updated here
Thread.Sleep(3000);
RunOnUiThread(() => dialog.Dismiss());
});
你做错了的是,你睡的是UI线程,而不是你在
踏板池中产生的后台线程。请尝试以下方法:
ThreadPool.QueueUserWorkItem(state => {
// Processing stuff here
DialogFragment dialog;
RunOnUiThread(() => {
dialog = CreateNewPostedMessageDialog(cardSwipeData,
messagesMap, bitmapByteString, this);
dialog.Show(FragmentManager, "PostedMessage");
});
// ListAdapter gets updated here
Thread.Sleep(3000);
RunOnUiThread(() => dialog.Dismiss());
});
谢谢我不知道可以使用多个UI线程。谢谢!我不知道可以使用多个UI线程。为此使用postDelayed方法。为此使用postDelayed方法。