[英]Java/Android - How to set timeout external service call with handler
我的场景是一个onCreate()活动方法,该方法执行以下代码(简化):
dialog.show(); //loading wheel
try {
remote.sendRequest(myData, new MyHandler());
}
catch (Exception e) {
dialog.dismiss();
//log and react
}
class MyHandler extends SDKSpecificCompiledHandler {
@Override
public void failure() {
dialog.dismiss();
//do stuff
}
@override
public void success() {
dialog.dismiss();
//do stuff
}
}
//I have read-only access to this handler!
public abstract class SDKSpecificCompiledHandler {
public abstract void success(JSONObject successData);
public abstract void failure(JSONObject errorData);
}
说明:一个远程服务被称为传递处理程序,该处理程序完成后将被调用。 向用户显示装载轮(对话),直到成功,失败或异常发生。
问题是当服务被成功调用但没有响应时。 在这种情况下,不会调用dialog.dismiss()
,并且加载轮永远旋转。
我需要的是一种超时机制,如果服务器不恢复运行,它将在几秒钟后关闭对话框(并可能采取其他措施)。
我的第一个操作是为服务调用创建一个新线程,并在启动后立即设置一个计时器来关闭对话框。 这是个好主意吗?
谢谢,
编辑 :
该服务是第三方/不可编辑的。 我正在使用预编译的工件。
最好在服务调用本身中使用超时,您可以通过服务设置超时,如果您需要知道如何设置超时,那么我应该知道您正在使用哪种服务?
还有一件事是,如果您使用的是加载程序,则应以一种可以被客户端取消的方式制作该加载程序。
仍然不确定自己要实现什么,但是如果您想在主线程上运行一段时间后再运行一些代码(即您的代码将对UI起作用),则可以使用android.os.Handler
mHandler = new Handler(getMainLooper());
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
// do stuff on UI thread
}
},10000);
从服务器返回呼叫时,只需取消队列中的消息即可:
mHandler.removeCallbacksAndMessages(null);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.