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线程阻塞

解决方案如下:

  • 监听器应该启动线程(或其他什么),将UI置于“等待验证”状态,然后返回
  • 线程应该建立数据库连接,验证凭据,然后使用
    runOnUiThread
    将UI从“等待验证”状态中移除
  • 如果用户在“等待验证”中单击按钮,则忽略它

  • 后台线程可以更新UI以指示进度。并且需要向用户指示验证步骤已通过或失败。

    您正在等待线程完成。不要这样做,它会阻塞UI线程,使多线程变得无用。而是异步处理结果。您可能希望解释此登录屏幕如何适合您的应用程序工作流。如果它的设置类型为屏幕,您可以在凭据失败时祝酒,或者如果它是幻灯片放映类型,则在验证之前不显示“下一步”按钮/屏幕。@MorrisonChang是的,我很抱歉。我正在使用此登录屏幕,当第一次调用返回时,它将返回1或0,1为通过,0为失败。这是基于电子邮件和密码。当返回该值时,它将转到validate,哪个将看到1或0,如果是1,则它应启动微调器并使submit the按钮不可见。如果是0,那么它将发出祝酒词,表示登录失败。第二个数据库连接返回时有一个长钉,我将其拆分并放入数组中以传递到下一页。@Henry所以我需要这样做的原因是,如果我不等待它,那么我的验证将总是错误的。我尝试使用async,但我需要这样做。我正在尝试从主线程中获得工作。请解释为什么在单独的线程上调用连接后不能调用validate。