我正在编写Android远程应用。当我触摸并移动Android应用程序时,服务器计算机上的光标也会移动,但它会延迟大约一秒。
我的应用程序只是两个线程:客户端发送坐标,服务器接收它们,这就是全部。 我的解决方案是通过ObjectInputStream传递dx,dy并使用Robot :: mouseMove移动光标。
你能给我一些建议来防止光标延迟吗?(顺便说一句RemoteDroid ^^)
我的服务员:
public void run() {
..........
while(true) {
// get dx, dy from ObjectInputStream
........
moveMouseByDelta(dx, dy);
}
...........
}
private void moveMouseByDelta(int dx, int dy)
{
try {
Point p = MouseInfo.getPointerInfo().getLocation();
int currentX = p.x;
int currentY = p.y;
Robot robot = new Robot();
robot.mouseMove(currentX + dx, currentY + dy);
} catch (AWTException e) {
e.printStackTrace();
}
}
我的客户端(Android远程应用):
private void touchTouchPad(MotionEvent event)
{
int x = (int)event.getX();
int y = (int)event.getY();
switch(event.getAction()) {
............
case MotionEvent.ACTION_MOVE:
if(leftMouseHold) {
if(clientThread != null) {
int dx = x - xMouse;
int dy = y - yMouse;
xMouse += dx;
yMouse += dy;
clientThread.sendDelta(dx, dy);
}
}
break;
..............
}
}
(这不是我的功课,是我的学习)
编辑:添加更多信息
答案 0 :(得分:1)
我只谈到Windows操作系统,这并不罕见,因为RDP仅限于每秒56-64Kb的BW,
1 /冻结,减速和延迟是由两个设备的分辨率(在fe方便的480x320和fullHD PC显示器之间的像素之间)之间的平移引起的,如果差异(以像素为单位)更大,则运动更不自然,
2 /冻结和延迟是由数据连接的波动引起的
最糟糕的是,当他们将这两个因素放在一起的时候,那就是体面的乐趣