一段时间后绕过异步任务

时间:2015-04-03 07:49:49

标签: android android-asynctask

解释我要做的事情:

我的应用程序连接到蓝牙打印机并打印一些数据。 这是在AsyncTask中完成的(让我们称之为asyncPrint),以便用户可以在此期间正常使用应用程序。

asyncPrint准备数据并将其提供给打印机。现在准备数据另一个asyncTask(让我们调用它的asyncData)被调用,它连接到一个Web服务来获取一些数据。因为我在打印之前需要数据,所以我这样称呼它:

String a = ws.get();

这样打印就会等到asyncData完成。

但是,如果互联网连接速度很慢,这可能需要30秒,所以我想要做的是,如果我等待5秒,asyncData应该被绕过而不是停止或已经完成,并且打印应该没有来自互联网的数据。

asyncData应该仍然完成,因为它在完成后还会将一些数据保存到数据库中。

任何想法如何使这成为可能?

2 个答案:

答案 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。同时启动两个任务和内部句柄验证数据是否可用(如果可用)然后使用其他数据打印跳过它。第一个异步任务也将保存数据库中的数据,谢谢。