[英]Removing a dialog after a set amount of time
public void isWaitingResponse (boolean isWaiting) {
if (isWaiting && dialogLock == null) {
dialogLock = new Dialog(this, android.R.style.Theme_Panel);
dialogLock.setCancelable(false);
dialogLock.show();
// ToDo: If this dialog is still showing after 10 seconds
// Call the primary method within and activate the "else"
// condition code below to remove dialog, and clear app
// state for further communication
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
if (isWaiting && dialogLock != null) {
// Recursively call this method as false
isWaitingResponse(false);
}
}
}, 5000);
} else if (!isWaiting) {
if (dialogLock != null) {
dialogLock.dismiss();
dialogLock = null;
}
}
}
正如上面代码中的注释所指出的,这确实有效,并且可以正确执行我需要的操作。 我只是想知道我是否要附加处理程序,或者是否需要进行任何其他清理以确保活动代码中不会留下垃圾。 不太熟悉处理程序。
更新:我想确保如果关闭对话框(此方法输入的参数为false),则该处理程序不会触发。 因此,如果进行错误检查,则如果处理程序的发布延迟,则该处理程序应与对话框一起关闭。 我必须确保上一个请求的发布延迟超时不会拒绝以后的请求。
已解决,答案由我自己发布-感谢Yessine。
在显示对话框后,输入此代码,它将在10秒钟后运行
new Timer().schedule(new TimerTask() {
public void run() {
dialogLock.dismiss();
}}, 10000);//time in milliseconds
此答案是@Yessine Mahdouani的建议的实现。
首先创建一个计时器:
final Timer timerUnlock = new Timer();
在锁定过程时,还涉及安排计时器事件,该事件重新启动根方法本身:
if (isWaiting &&
lockDialog == null)
{
lockDialog = new Dialog(this, android.R.style.Theme_Panel);
lockDialog.setCancelable(false);
lockDialog.show();
timerUnlock.schedule(new TimerTask() {
@Override
public void run() {
// Close it automatically if running.
m_setisWaiting(false);
}
}, 10000);
}
解锁时,请确保取消任何计时器,这可以防止先前的锁定计时器解锁尚未完成且尚未超时的最新锁定:
else if (!isWaiting)
{
if (lockDialog != null) {
lockDialog.dismiss();
lockDialog = null;
}
timerUnlock.cancel();
}
最后,将在接口级别上运行的代码应在主线程上运行(否则将导致连续崩溃-可能是因为计时器正在完成并从单独的线程触发:
runOnUiThread(new Runnable() {
@Override
public void run() {
// Remove any timeouts still running.
if(progressBar != null) {
if(isWaiting)
progressBar.setVisibility(View.VISIBLE);
else
progressBar.setVisibility(View.GONE);
}
}
});
完整方法如下:
public void m_setisWaiting (boolean isWaiting) {
final Timer timerUnlock = new Timer();
if (isWaiting &&
lockDialog == null)
{
lockDialog = new Dialog(this, android.R.style.Theme_Panel);
lockDialog.setCancelable(false);
lockDialog.show();
timerUnlock.schedule(new TimerTask() {
@Override
public void run() {
// Close it automatically if running.
m_setisWaiting(false);
}
}, 10000);
}
else if (!isWaiting)
{
if (lockDialog != null) {
lockDialog.dismiss();
lockDialog = null;
}
timerUnlock.cancel();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
// Remove any timeouts still running.
if(progressBar != null) {
if(isWaiting)
progressBar.setVisibility(View.VISIBLE);
else
progressBar.setVisibility(View.GONE);
}
}
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.