有人可以解释为什么Handlers发布了一个可运行的?重写handleMessage和发送消息是否也做同样的事情?
我写了一些未经测试的代码来说明我认为这两种方法的实现方式.如果我的方法错了,请纠正我.
邮政处理程序:
handler.post(new Runnable() {
@Override
public void run() {
imageView.doSomething();
}
});
Run Code Online (Sandbox Code Playgroud)
handleMessage处理程序:
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
imageView.doSomething();
}
};
handler.sendMessage(message);
Run Code Online (Sandbox Code Playgroud) 我有一个主要的活动和约束服务.绑定服务从网络接收命令,该命令触发将消息发送到主活动中的处理程序.通过传递Handler对服务的引用,我得到了一切.然后......我偶然发现了一个叫做Messenger的东西.
Messenger:引用Handler,其他人可以使用它向其发送消息.这允许跨进程实现基于消息的通信,方法是在一个进程中创建指向Handler的Messenger,并将该Messenger交给另一个进程.
这引发了一些问题:
我有一个服务,它从Internet接收命令并启动后台线程.该线程从服务传递一个处理程序(服务有界并传递处理程序)并向处理程序发送消息以拍照.我坚持执行处理程序.
static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
//TODO: Handle different types of messages
mCamera.takePicture(null, null, MainActivity.this);
}
};
Run Code Online (Sandbox Code Playgroud)
问题:
我目前正在 WiFi Direct 上阅读 Android 文档。我知道一个 WiFi Direct 接入点可以有多个客户端,但 WiFi Direct 可以支持树形或网状拓扑吗?例如,如果我有一个会议厅,每个人都打开手机,我是否可以从节点 1 向节点 n 发送数据,即使两个节点相距 k 个分支?
<input type="file" capture="camera" accept="image/*">允许移动浏览器拍照。在 Android 原生浏览器和 chrome 上,单击输入按钮可立即启动相机。在 iOS Safari 上,该按钮会发出警报,要求“拍照”或从“照片库”中进行选择。如何立即启动本机相机?