小编jar*_*bek的帖子

移动Safari上的JavaScript websocket中的明显阻塞行为

我遇到了一个真正令人头疼的问题,我希望有人可以解决我的问题.

我正在编写的应用程序是一个基于JS的客户端,本质上是一个桌面共享服务.该服务从桌面捕获图像,将它们编码为base64编码的jpeg,并通过websocket将它们发送到JS客户端.客户端然后显示这些图像(作为数据URI),用户可以将鼠标移动到图像上以及单击图像,这些鼠标事件被编码为XML中的命令,这些命令被放入队列并每隔15ms在计时器上进行服务这样,队列可以在发送到服务之前清除冗余或重复的命令.然后执行这些命令(在桌面上生成点击事件,移动鼠标等),并生成新的桌面图像并继续循环.

整个系统运行得非常好,除了iPad上Safari上的一些非常不一致的行为.本质上,当用户在屏幕上移动他们的手指时,客户端似乎阻止(或可能取消优先级)websocket上的传入消息,而仅支持发送传出消息.显而易见的是,当您移动手指时,只要您触摸屏幕,显示器就不会更新,然后一旦抬起手指,onMessage()将收到大量图像更新,然后快速连续动画到屏幕上.

Mobile Safari是唯一似乎以这种方式运行的浏览器,我测试过的桌面浏览器或任何Android平板电脑都没有显示出相同的行为.

我已经将登录到websocket上的入站和出站方法,它确认了我见过的行为.在Safari上,我会连续收到大量的出站邮件,然后是大量的入站邮件,而在Android上,当您在屏幕上拖动手指时,我会看到入站和出站邮件交错,因此在Android上显示当你拖着手指时,它会继续更新.

我怀疑websocket是罪魁祸首的主要原因是因为客户端具有回退机制,因此如果浏览器没有websocket支持,则会创建一对XHR对象(一个用于入站,一个用于出站),而是使用websocket的.如果我强制移动Safari使用XHR而不是websockets,问题就会消失.在这种情况下,只有通信机制发生变化(用于捕获输入事件和显示图像的所有代码保持不变).

我意识到这是一个非常具体的问题,没有代码就很难诊断,但我选择不发布代码只是因为客户端中的代码量很大.

如果有人看到类似于我所描述的行为,或者知道这种行为的任何潜在原因,我将非常感谢您的意见.

javascript safari events websocket ios

6
推荐指数
1
解决办法
1256
查看次数

从AlertDialog(Android)启动长时间运行的任务

我有一个AlertDialog,它有一个按钮,如果选中,将启动文件上传到远程服务器,如下所示:

builder.setMessage(text)                
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
uploadFile();
}})
Run Code Online (Sandbox Code Playgroud)

这很好用,唯一的问题是uploadFile()可能需要很长时间(30秒到2分钟).我想用一个进度对话框(甚至是一个不确定的对话框)替换AlertDialog,但是我看不到如何从另一个对话框启动一个对话框?

任何人都可以提供一些建议,我可以做到这一点.

谢谢,Jarabek

android task android-alertdialog

0
推荐指数
1
解决办法
1582
查看次数