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无响应。如果要在三秒后关闭对话框,可以使用处理程序类中的p
ostDelayed()

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无响应。如果要在三秒后关闭对话框,可以使用处理程序类中的p
ostDelayed()

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方法。