Android 屏幕冻结,无法识别触摸事件
我们有一个应用程序,它运行在带有安卓4.3的HP Slate 21 Pro上,平板电脑和应用程序功能位于一个信息亭中,用户可以走到该信息亭前执行任务 该应用程序非常小,有两个屏幕: 第一个屏幕允许输入员工编号,该输入使用连接的RFID USB读卡器读取卡。RFID阅读器使用键盘模拟来填充隐藏字段,并使用异步任务将数字“提交”到后端API 一旦用户扫描了他们的卡,他们就有效地“登录”,并加载第二个活动,使用异步任务查找与用户相关的数据,并显示用户的数据。此时用户可以在屏幕上选择项目 我们遇到的问题是,在使用用户数据加载此活动后,应用程序不会响应任何触摸事件,所有按钮都无法单击或响应。此外,平板电脑的“主页”、“主页”和“最近项目”按钮也不起作用。按下时,所有按钮也不会改变状态 屏幕似乎被锁定,不接受用户输入。挑战在于,这并不是一直都在发生,除了在现场(生产),我们也无法在任何地方重现该问题 最初的想法是有什么东西阻塞了主线程,但是在用户“登录”后加载的屏幕上,有一个屏幕超时,使用处理程序来启动延迟超时调用,如果用户没有与屏幕交互,他们将被带回主屏幕,有效地充当“日志记录”用户已退出不活动状态。此处理程序正在启动并将用户返回到主活动 回到主屏幕后,平板电脑仍然不会响应触摸事件,但是用户可以扫描他们的卡,重复该过程以“登录”,并被带到同一屏幕,此时屏幕不会响应触摸事件,存在相同的行为 以下是实现屏幕超时的基本活动:Android 屏幕冻结,无法识别触摸事件,android,user-interface,hardware,Android,User Interface,Hardware,我们有一个应用程序,它运行在带有安卓4.3的HP Slate 21 Pro上,平板电脑和应用程序功能位于一个信息亭中,用户可以走到该信息亭前执行任务 该应用程序非常小,有两个屏幕: 第一个屏幕允许输入员工编号,该输入使用连接的RFID USB读卡器读取卡。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
我已经确认,其他输入设备在触摸屏不工作时。当这种情况发生时,我能够连接鼠标。我使用鼠标导航到主屏幕,然后导航到设置屏幕。在此期间,触摸屏没有响应,但设备对鼠标点击做出响应。这让我相信触摸屏存在硬件问题。我们已经确认,当这个问题发生时,连接的鼠标和键盘仍然工作。所有其他应用程序也表现出相同的行为。此外,当出现此问题时,我们可以使用鼠标导航到设置屏幕并启用触摸指示灯,以便在屏幕上显示屏幕触摸。当完成此操作并触摸屏幕时,实际事件将显示在屏幕上约6至8英寸远的位置 该设备是由三个摄像头驱动的两点式触摸屏。我们已经联系了HP,他们表示其他用户也报告了类似问题,他们正在调查该问题,并表示这可能是驱动程序问题
这不是一个软件问题,而是一个硬件问题。我知道这是一个很遥远的目标,但也许你还活着:惠普找到什么了吗?DominikusK@DominikusK说,我们确实在一台设备(不是HP)上遇到了同样的问题(完全冻结触摸,显示的应用程序仍在运行)。惠普承认了这个问题,但从未提供解决方案,我们换了另一款平板电脑。