我们的应用程序在带有Android 4.3的HP Slate 21 Pro上运行,该平板电脑和应用程序功能位于自助服务终端的环境中,用户可以通过它来执行任务。
应用程序很小,有两个屏幕:
第一个屏幕允许输入员工编号,此输入是使用附带的RFID读卡器读取的。 RFID阅读器使用键盘仿真来填充隐藏字段,并使用异步任务将数字“提交”到后端API。
一旦用户扫描他们的卡,他们就会有效地“登录”并加载第二个活动,使用异步任务查找与用户相关的数据,并显示数据用户。此时用户可以在屏幕上选择项目。
我们遇到的问题是在使用用户的数据加载此活动后,应用程序不响应任何触摸事件,所有按钮都不可点击也无响应。此外,平板电脑的“主页”,“后退”和“最近的项目”按钮也不起作用。按下时所有按钮都不会改变状态。
屏幕显示已锁定且未接受用户输入。挑战在于,这种情况不会一直发生,我们也无法在现场(生产)的任何地方重现这个问题。
最初的想法是阻止主线程的东西,但是在用户“登录”之后加载的屏幕上,使用处理程序发起屏幕超时以发布延迟超时调用,如果用户不进行交互通过屏幕将它们带回主屏幕,有效地将用户“记录”为不活动状态。此处理程序正在触发并将用户返回到主活动。
一旦返回到主屏幕,平板电脑仍然不会响应触摸事件,但是用户可以扫描他们的卡重复该过程以“登录”并被带到同一屏幕,此时相同的行为存在于屏幕不响应触摸事件。
以下是实现屏幕超时的基本活动:
public abstract class BaseActivity extends Activity {
@Override
public void onResume() {
super.onResume();
resetDisconnectTimer();
}
@Override
public void onStop() {
super.onStop();
stopDisconnectTimer();
}
@Override
public void onUserInteraction(){
resetDisconnectTimer();
}
public void quit(View view) {
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm != null) {
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
public void resetDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
disconnectHandler.postDelayed(disconnectCallback, 10000);
}
public void stopDisconnectTimer(){
disconnectHandler.removeCallbacks(disconnectCallback);
}
private Handler disconnectHandler = new Handler(){
public void handleMessage(Message msg) {
}
};
private Runnable disconnectCallback = new Runnable() {
@Override
public void run() {
quit(getWindow().getDecorView());
}
};
}
我做了一些测试,我故意阻止主线程和超时 在线程解除阻塞之前不会触发,这会让我相信线程没有被阻塞。
最后在一段时间后(大约10到30秒),应用程序会再次开始响应触摸事件。
编辑2014-09-30
我开始怀疑除软件之外的其他因素导致问题,因为此设备有一个硬件设置按钮,将打开设置应用程序。
当应用程序冻结此硬件按钮时,将打开设置屏幕。但是,设置应用程序与原始应用程序的行为相同,因为它不响应触摸事件。
编辑2014-10-02
我已经确认触摸屏没有其他输入设备。发生这种情况时,我能够连接鼠标。我用鼠标导航到主屏幕,然后导航到设置屏幕。在此期间,触摸屏没有响应,但设备响应鼠标点击。这让我相信触摸屏存在硬件问题。
答案 0 :(得分:0)
我们已经确认,当发生此问题时,附加的鼠标和键盘仍可正常工作。所有其他应用程序也表现出相同的行为。此外,当出现此问题时,我们可以使用moust导航到设置屏幕并启用触摸指示器,以便屏幕上显示屏幕触摸。完成此操作并触摸屏幕后,屏幕上会显示大约6到8英寸的实际事件。
该设备是由三个摄像头驱动的两点式触摸屏。我们已与HP联系,他们已声明其他用户已报告类似问题,他们正在研究此问题,说明这可能是驱动程序问题。
这不是软件问题,而是此时的硬件问题。