Java 如何修复从慢速数据库连接中删除的帧?
Java 如何修复从慢速数据库连接中删除的帧?,java,android,Java,Android,button.setOnClickListener(新视图.OnClickListener(){ 公共void onClick(视图v){ progressBar.setVisibility(View.VISIBLE); button2=(按钮)findViewById(R.id.Button); 按钮2.setVisibility(视图已消失); Log.d(“电子邮件”,电子邮件); email=emailView.getText().toString(); Log.d(“email2”,e
button.setOnClickListener(新视图.OnClickListener(){
公共void onClick(视图v){
progressBar.setVisibility(View.VISIBLE);
button2=(按钮)findViewById(R.id.Button);
按钮2.setVisibility(视图已消失);
Log.d(“电子邮件”,电子邮件);
email=emailView.getText().toString();
Log.d(“email2”,email);
password=passwordView.getText().toString();
connection.start();
试一试{
connection.join();
}捕捉(中断异常e){
e、 printStackTrace();
}
对数d(“00”,“00”);
日志d(“11”、“11”);
如果(!validate()){
onFailed();
clearForm((视图组)findViewById(R.id.lin));
progressBar.setVisibility(View.INVISIBLE);
按钮2.设置可见性(视图.可见);
}否则{
屏幕大小();
}
}
});
}
我猜下面的连接
是一个线程
connection.start();
try {
connection.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
如果是这样,那么问题就很清楚了。调用join()
时会阻止UI线程。这就是造成“滞后”的原因。如果要避免延迟和帧丢失,则不能导致UI线程阻塞
解决方案如下:
runOnUiThread
将UI从“等待验证”状态中移除后台线程可以更新UI以指示进度。并且需要向用户指示验证步骤已通过或失败。您正在等待线程完成。不要这样做,它会阻塞UI线程,使多线程变得无用。而是异步处理结果。您可能希望解释此登录屏幕如何适合您的应用程序工作流。如果它的设置类型为屏幕,您可以在凭据失败时祝酒,或者如果它是幻灯片放映类型,则在验证之前不显示“下一步”按钮/屏幕。@MorrisonChang是的,我很抱歉。我正在使用此登录屏幕,当第一次调用返回时,它将返回1或0,1为通过,0为失败。这是基于电子邮件和密码。当返回该值时,它将转到validate,哪个将看到1或0,如果是1,则它应启动微调器并使submit the按钮不可见。如果是0,那么它将发出祝酒词,表示登录失败。第二个数据库连接返回时有一个长钉,我将其拆分并放入数组中以传递到下一页。@Henry所以我需要这样做的原因是,如果我不等待它,那么我的验证将总是错误的。我尝试使用async,但我需要这样做。我正在尝试从主线程中获得工作。请解释为什么在单独的线程上调用连接后不能调用validate。