Android 上的 Dialog 是异步的吗?

2024-03-01

我正在对 Android 上的对话框行为进行一些研究。

我知道 android 的设计是为了防止对话框成为模式,我也读过,例如这里对话框/警报对话框:如何在对话框启动时“阻止执行”(.NET 样式) https://stackoverflow.com/questions/2028697/dialogs-alertdialogs-how-to-block-execution-while-dialog-is-up-net-style,该对话框是异步执行的。

但我做了一些测试,发现对话框的执行要等到调用 show() 之后放置的代码执行。

这是我的测试代码:

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    AlertDialog.Builder builder = new AlertDialog.Builder(this);

    builder.setTitle("Question");
    builder.setMessage("Yes or No?");

    builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

        public void onClick(DialogInterface dialog, int which) {
             dialog.dismiss();
        }

    });

    builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
        }
    });

    AlertDialog alert = builder.create();
    alert.show();


    System.out.println("MainActivity.onCreate -Before sleep-");
    Toast.makeText(this, "MainActivity.onCreate. -Before sleep-", Toast.LENGTH_LONG).show();

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    Toast.makeText(this, "MainActivity.onCreate. -Wake up-", Toast.LENGTH_LONG).show();
    System.out.println("MainActivity.onCreate. -Wake up-");

}
}

我的意思是,当您执行该测试代码时,它会执行到 onCreate() 方法的底部,包括 5 秒的暂停,之后,当您看到 toast 和写入日志猫的消息时,对话框为显示。

所以我认为对话框是异步的并不正确,因为它们似乎是在 UI 线程中执行的,而不是在不同的线程中执行的after一些代码已经完成。

真正奇怪的是,对话框的执行等待启动对话框的行之后编写的代码的执行。

此外,我不明白为什么 UI 线程应该被“模式对话框”阻止,而不是被行为如我所解释的对话框阻止。

当alert.show之后的行在对话框显示之前执行时,以及当这些行等待执行直到对话框从用户那里得到答案时(就像模态对话框的行为一样),UI线程的状态有什么区别?

预先感谢您的阅读,并对我的英语表示抱歉。


那行代码:

alert.show();

告诉系统在 UI 线程的下一个“tick”处异步显示警报,因此之后的所有代码都会首先执行。

UI线程有消息Looper http://developer.android.com/reference/android/os/Looper.html即按顺序处理消息。您的 onCreate() 函数正在执行,因为循环器正在处理属于应用程序启动一部分的消息。 onCreate() 函数必须首先完成执行,然后循环程序才能循环回到下一条消息,该消息将是通过调用放入消息队列的“使警报对话框可见”消息show().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 上的 Dialog 是异步的吗? 的相关文章

  • 从 Throwable 获取错误代码 - Android

    我怎样才能从错误代码可投掷 https developer android com reference java lang Throwable html public void onFailure Throwable exception 我
  • Android第一次动画不流畅

    我正在尝试一个动画将 imageView 从屏幕底部滑动到屏幕中心 但是当我第一次执行此动画时 它不平滑 但当第二次执行动画时 它是正常且平滑的 我几乎尝试了所有方法 但无法解决我的问题 这是我的动画文件
  • 导航组件重复 NavArgs 的问题

    我有一个片段 class SomeFragment private val args by navArgs
  • 如何从 SQLite 获取记录总数

    我正在尝试从 Sqlite DB 获取行的总数 以下是我想要做的代码片段 我不知道我在这里做错了什么 public static int getTotalCount Context context Cursor c null try c g
  • Phonegap - 如何将.txt文件保存在Android手机的根目录中

    我正在尝试使用phonegap 将 txt 文件保存在Android 手机的根目录中 我已经安装了这些插件 cordova plugin file 和 cordova plugin file transfer 在 config xml 文件
  • RxJava、Proguard 和 sun.misc.Unsafe

    我有以下问题RxJava 1 1 0 使用时Proguard 我没有更改 RxJava 版本或其 pro文件 但更新后OkHttp我无法编译使用Proguard因为我有关于sun misc Unsafe不在场 rxJava pro keep
  • 设置从 Facebook 登录获取用户电子邮件 ID 的权限

    我在用着Facebook 3 0 SDK对于安卓 我必须实施Facebook登录 我正在访问用户的基本信息 例如姓名 用户 ID 但我也想访问用户的电子邮件 我浏览了很多博客和论坛 但不知道该怎么做 我正在使用我自己的 android 按钮
  • 获取 AlarmManager 中活动的 PendingIntents 列表

    我有办法获取活动列表PendingIntent在设备中 我开始工作AlarmManager我想看看我的PendingIntents 已正确创建和删除 也很高兴看到其他什么PendingIntent在那里 只是为了看看某些应用程序是否正在做一
  • 在我的Android中,当其他应用程序想要录制音频时如何停止录音?

    在我的应用程序中 服务通过 AudioRecord 持续录制音频 当我的应用程序运行时 其他与音频记录相关的应用程序 例如 Google 搜索 无法工作 如何知道何时有其他应用想要录制音频 以便我可以停止录制以释放资源 答案是MediaRe
  • 从 Firebase 数据库填充微调器

    public class MainActivity extends AppCompatActivity DatabaseReference reference Spinner areaSpinner ArrayList
  • 应用程序未安装在 Android 模拟器上

    我正在 android Geocoder 中开发一个应用程序 当我运行该应用程序时 它会显示 2011 01 11 11 08 13 GeoTourProject 自动目标模式 使用现有模拟器 emulator 5554 运行兼容的 AVD
  • Flutter 深度链接

    据Flutter官方介绍深层链接页面 https flutter dev docs development ui navigation deep linking 我们不需要任何插件或本机 Android iOS 代码来处理深层链接 但它并没
  • ROOM迁移过程中如何处理索引信息

    CODE Entity tableName UserRepo indices Index value id unique true public class GitHubRepo PrimaryKey autoGenerate true p
  • Android 设备上的静默安装

    我已经接受了一段时间了 在 Android 上静默安装应用程序是不可能的 也就是说 让程序安装捆绑为 APK 的应用程序 而不提供标准操作系统安装提示并完成应用程序安装程序活动 但现在我已经拿到了 Appbrain 快速网络安装程序的副本
  • 下载后从谷歌照片库检索图像

    我正在发起从图库中获取照片的意图 当我在图库中使用 Nexus 谷歌照片应用程序时 一切正常 但如果图像不在手机上 在 Google Photos 在线服务上 它会为我下载 选择图像后 我将图像发送到另一个活动进行裁剪 但在下载的情况下 发
  • 当手机旋转(方向改变)时如何最好地重新创建标记/折线

    背景 开发一个使用 Android Google Map v2 的本机 Android 应用程序 使用android support v4 app FragmentActivity 在 Android v2 2 上运行 客观的 在更改手机方
  • Android - 将 ImageView 保存到具有全分辨率图像的文件

    我将图像放入 ImageView 中 并实现了多点触控来调整 ImageView 中的图像大小和移动图像 现在我需要将调整大小的图像保存到图像文件中 我已经尝试过 getDrawingCache 但该图像具有 ImageView 的大小 我
  • SharedFlow 和 StateFlow 的主要区别

    两者有什么区别共享流 and 状态流 以及如何使用这些MVI建筑学 使用简单更好吗Flow或者这些作为状态和事件 Flow 是冷的 意味着它仅在收集数据时才发出数据 另外Flow不能保存数据 可以把它看成是水在里面流动的管道 Flow中的数
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 无法运行我的应用程序,要求选择 Android SDK

    今天我已经安装了Android Studio 金丝雀 1 现在我无法运行我的应用程序 将出现以下对话框 我已经通过 文件 gt 项目结构 gt Android SDK 位置 设置了正确的 SDK 位置 期待您的帮助来解决这个问题 警告对话框

随机推荐

  • 用于大型数据集的 sqlite 或 mysql

    我正在处理大型数据集 数十百万条记录 有时是数百百万条记录 并且想要使用与 R 良好链接的数据库程序 我正在尝试在 mysql 和 sqlite 之间做出决定 数据是静态的 但我需要做很多查询 In this 链接到 sqlite 帮助 h
  • Mongodb NoRM 和 POCO

    我正在 C 中试验 Mongodb 和 NoRM 根据我的阅读 唯一标识 Mongodb 中文档的 ObjectId 是一种 特殊 Guid 从某种意义上来说是唯一的 但其中有一些重要的部分 可以更轻松地进行排序和索引 时间戳 机器哈希 p
  • 如何处理“AES/GCM/NoPadding”的 IV 和身份验证标签?

    我在用着AES GCM NoPaddingJava 8 中的加密 我想知道我的代码是否存在安全缺陷 我的代码似乎work 因为它加密和解密文本 但一些细节尚不清楚 我的主要问题是 Cipher cipher Cipher getInstan
  • 谷歌地图 API 3 + WMS

    有人可以给我最好的主意 如何将 WMS 图层放在 Google 地图上 我有很多图层和很多样式 我在 StackOverflow 研究了很多问答 但我没有明白如何管理多种样式和图层 我想放入我的 JQuery 代码中 这里有一个很好的例子
  • CryptEncrypt 不加密整个文本

    我正在尝试使用 wincrypt 加密短信 然而我的代码是不可预测的 它不会加密 解密整个明文 而只会加密 解密其中的一部分 如果我更改密码的长度 例如更改为 password123 它会加密 解密不同数量的字符 这是我的代码 includ
  • 如何获得国家名称

    我使用下面的代码来获取文化类型列表 有没有办法只获取国家 地区名称 谢谢 static void Main string args StringBuilder sb new StringBuilder foreach CultureInfo
  • socket.gaierror: [Errno -2] Python3 未知名称或服务

    我正在尝试使用端口扫描程序 import socket import subprocess import sys from datetime import datetime subprocess call clear shell True
  • 如何在 ASP.NET Core 中使用 JWT 授权重定向到 401 登录页面

    我的 Startup cs 中有这个 JWT 授权配置 services AddAuthentication opts gt opts DefaultAuthenticateScheme JwtBearerDefaults Authenti
  • 拉伸链接引导程序实用程序在 Chrome 中不起作用

    看来拉伸链接 https getbootstrap com docs 4 4 utilities stretched link 在 Bootstrap 中不适用于 tr Firefox 可以 但 Chrome 不行 Chrome 似乎忽略了
  • Powershell - 使用共享证书添加 SSL 绑定

    我正在使用以下代码将证书链接到我添加的 SSL 绑定 thumb Get ChildItem cert LocalMachine My where object Subject like wildCardSubject Select Obj
  • bash / shell 脚本中增加时间(分钟和秒)

    我需要在变量中增加分钟和秒 相对于时间 首先 我不确定声明 时间 变量是否写为 time 00 00 00 or time date 00 00 00 从那里 我想将该变量增加 10 分钟和秒 结果是01 00 00 增加至01 10 10
  • 尝试在 C 中执行 strcat 函数时 EXC_BAD_ACCESS

    我有一个用 C 语言为 uni 编写的程序 当我的代码到达这一行时 strcat md5 blah 我收到 EXC BAD ACCESS 错误 并且我的应用程序崩溃了 据我所知 它没有任何问题 所以我认为一双新的眼睛可能会解决我的问题 有任
  • Google fit API:如何获取活动期间所走路线的地图?

    我正在使用 Google Fit API 开发健身应用程序 看看这张 Google Fit 应用程序上记录的 Google Fit 训练的图片 here https i stack imgur com q2ykP png 我想知道是否可以将
  • 内部字符串、字符串池和永久空间上的垃圾收集

    在探索了 java 的字符串内部结构之后 我对所谓的 永久空间 感到困惑 我最初的理解是它持有String literals以及类元数据 如中所述这个问题 https stackoverflow com questions 1279449
  • Pandas 数据透视表中缺少值?

    我有一个数据集 如下所示 student question answer number Bob How many donuts in a dozen A 1 Sally How many donuts in a dozen C 1 Edwa
  • python 使用逗号交换值会引起混乱

    这涉及到我在尝试解决链表反向问题时遇到的一个问题 首先放一些链表定义和生成链表的快速方法的初步代码 class ListNode def init self x self val x self next None def repr self
  • 从 SQL 中的 xml 获取逗号分隔值

    我从存储过程调用标量 UDF 来获取列值 在标量 UDF 中 我有一个 xml 并且必须获取特定节点的逗号分隔值 我使用了Cross apply 但它造成了巨大的性能瓶颈 因为存储过程实际上是用来获取报告的 有一个表 Traveler 其中
  • 如何让我的 VS Code 扩展为 ES6 标记模板文字字符串中的非 JS 代码提供建议和语法突出显示?

    我正在开发 Visual Studio Code 的 GraphQL 扩展 它为 GraphQL 架构和查询实现语法突出显示和自动完成 目前它适用于以 gql扩大 然而 常见的 GraphQL 用法是在 JavaScript TypeScr
  • 通过引用参考文献直观地理解函数[重复]

    这个问题在这里已经有答案了 可能的重复 由于某种原因 这超出了我的直觉 我在互联网上找不到任何解释 C 函数获取引用的引用意味着什么 例如 void myFunction int val what does this mean 我理解通过引
  • Android 上的 Dialog 是异步的吗?

    我正在对 Android 上的对话框行为进行一些研究 我知道 android 的设计是为了防止对话框成为模式 我也读过 例如这里对话框 警报对话框 如何在对话框启动时 阻止执行 NET 样式 https stackoverflow com