Java中带超时的Android重复任务
我有重复任务的问题 基本上,我正在开发一项服务,它可以发送短信息并检查一分钟的响应。如果收到响应,我将用成功消息更新textview,否则将失败。 我的发送短信服务工作正常,但我一直无法接收短信。 我打电话发送短信并检查短信,如下所示:Java中带超时的Android重复任务,java,android,concurrency,Java,Android,Concurrency,我有重复任务的问题 基本上,我正在开发一项服务,它可以发送短信息并检查一分钟的响应。如果收到响应,我将用成功消息更新textview,否则将失败。 我的发送短信服务工作正常,但我一直无法接收短信。 我打电话发送短信并检查短信,如下所示: sendSms("6617", "Test") // it works; readSms.run() // it works too; if (message.equals("desired sms"){ // it doesn't wait read sms
sendSms("6617", "Test") // it works;
readSms.run() // it works too;
if (message.equals("desired sms"){ // it doesn't wait read sms to finish
updateTextView("Success");
}
else{
updateTextView("Fail");
}
以下是readSms
:
Runnable readSms = new Runnable(){
receivedMessage = "";
@Override
public void run() {
try {
//..checking sms..//
if (smsreceived) {message=receivedMessage;}
} finally {
mHandler.postDelayed(readSms, mInterval);
}
}
};
如何使readSms
以1秒间隔等待60秒超时。如果收到短信,我应该成功更新textview,否则我将等待超时并将textview设置为fail。您可以做的是:
可调用的提交到线程池
// Create a thread pool composed of only one thread in this case
ExecutorService executor = Executors.newSingleThreadExecutor();
以可调用的方式提交任务
Future<String> result = executor.submit(new Callable<String>(){
@Override
public String call() {
try {
//..checking sms..//
if (smsreceived) {return receivedMessage;}
return null;
} finally {
mHandler.postDelayed(readSms, mInterval);
}
}
});
如果在1分钟内无法检索结果,get
方法将抛出TimeoutException
NB:线程池不能在每次调用时创建,必须在类中一次性创建,以便在每次调用时重用它。检查AsyncTask,它是为Androiddo thread.sleep(1000*60)线程内的后台操作而设计的。这将使线程等待60秒,然后检查是否收到短信。使用倒计时
try {
String receivedMessage = result.get(1, TimeUnit.MINUTES);
} catch (TimeoutException e) {
// ok let's give up
}