- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
几天以来,我试图弄清楚如果我在
中执行代码到底会发生什么void function(){
//somePreExecutionCode
new Handler().post(new Runnable(){
@Override
public void run(){
//someCode
}
});
}
它似乎并没有阻塞 UI,因此调用 function() 的按钮在 someCode 完成之前不会停留在单击的位置。但是,如果 somePreExecutionCode 启动了一个进度条,则进度条会在 someCode 完成的同一时刻显示。我知道,有 AsyncTasks for,但还有其他可能性吗?
和
有什么区别new Handler().post
和
View.post
?
最佳答案
创建 Android 应用程序时,系统会创建一个执行主线程。该线程称为 UI 线程,所有与 UI 相关的操作都发生在该线程上,以避免同步问题。
A Looper实例是在这个线程上创建的,它有一个 MessageQueue数据结构。 Looper 将处于无限循环中等待读取 Message。/Runnable在 MessageQueue 上发布的实例.添加 Message7/Runnable到消息队列,Handler被使用。
当您创建一个 Handler 实例时,它将与当前执行线程和在该特定线程上创建的 Looper 实例相关联。
因此,当您通过 Handler 发布消息时,消息会添加到 MessageQueue 中,Looper 将按 FIFO 顺序读取该消息并将其传递给目标。
new Handler().post() 和 View.post 有点不同。
关于Android Handler.post,到底发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22983776/
这对你们来说可能很简单,但由于我是java新手,所以我想知道实际上什么是 接下来的部分会发生什么? if (args.length > 0) { file = args[0]; } publi
在我的 View Controller 中,我将 UITapGestureRecognizer 添加到 self.view。我在 self.view 之上添加了一个小 View 。当我点击小 View
我今天尝试从 Obj-C 开始并转到 Swift,我正在阅读文档。我试图在 Swift 中创建一个简单的 IBOutlet,但它不断给我这些错误。 View Controller 没有初始化器 req
我正在尝试使用 VIM 完成(字典和当前缓冲区),但我遇到了问题?和 !在方法名称的末尾。我能以某种方式向 vim 解释方法名称(基本上是单词)最后只能有它,而且只有一个,即 method_name
我是一名优秀的程序员,十分优秀!