解释我要做的事情:
我的应用程序连接到蓝牙打印机并打印一些数据。 这是在AsyncTask中完成的(让我们称之为asyncPrint),以便用户可以在此期间正常使用应用程序。
asyncPrint准备数据并将其提供给打印机。现在准备数据另一个asyncTask(让我们调用它的asyncData)被调用,它连接到一个Web服务来获取一些数据。因为我在打印之前需要数据,所以我这样称呼它:
String a = ws.get();
这样打印就会等到asyncData完成。
但是,如果互联网连接速度很慢,这可能需要30秒,所以我想要做的是,如果我等待5秒,asyncData应该被绕过而不是停止或已经完成,并且打印应该没有来自互联网的数据。
asyncData应该仍然完成,因为它在完成后还会将一些数据保存到数据库中。
任何想法如何使这成为可能?
答案 0 :(得分:1)
这个怎么样:你一起开始这两个任务,但打印任务延迟了5秒。如果有任何数据来自服务器,请使用它,否则,请不要使用。
在伪代码中会看起来像这样:
public class MyActivity extends Activity{
String dataFromServer;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Start both tasks
startGetDataFromServerTask();
startPrinterTask();
}
private void startGetDataFromServerTask() {
new GetDataFromServerTask(new OnTaskFinished() {
public void onTaskFinished(String result) {
dataFromServer = result;
// additionally
saveToDatabase(dataFromServer);
}
}).execute();
// OnTaskFinished is in interface callback that you use to pass the result from the
// asynctask to your calling activity.
}
private void startPrinterTask() {
// Delay the task by 5 seconds.
// If the data from server managed to arrive, good, the printer task will have it.
// Otherwise, it won't (you'll have to check for null in the task)
new Handler().postDelayed(new Runnable() {
public void run() {
new PrinterTask(dataFromServer).execute();
}
}, 5 * 1000);
}
}
答案 1 :(得分:0)
您好,您可以使用Handler,延迟时间为5 * 1000 mills。同时启动两个任务和内部句柄验证数据是否可用(如果可用)然后使用其他数据打印跳过它。第一个异步任务也将保存数据库中的数据,谢谢。