最简洁的方法来创建异步任务?

时间:2018-03-14 14:31:08

标签: android android-asynctask

我需要执行一个涉及网络的非常简单的操作。我知道这必须使用异步任务来完成,因为在主线程上运行涉及网络操作的任务是不好的。

因为使用经典方式非常冗长

private class LongOperation extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            //to do
            return "Executed";
        }

        @Override
        protected void onPostExecute(String result) {
            //to do
        }

        @Override
        protected void onPreExecute() {}

        @Override
        protected void onProgressUpdate(Void... values) {}
    }

用于必须仅下载少量位的方法静态方法调用

我想知道是否有更简洁的形式或替代品我可以使用。

4 个答案:

答案 0 :(得分:1)

您不需要AsyncTask。这只是一个方便使用,因为它已经有回调方法。

您可以创建新的Thread并在那里执行您的网络电话。

答案 1 :(得分:1)

创建工作线程的方法有很多种。这取决于你在网络上做了什么。

  • 如果您只想执行简单网络操作,例如下载一些JSON数据,请将其恢复为更新UI:使用AsyncTask
  • 如果您要执行涉及中等到大量数据(上传或下载)的长网络操作:请使用Thread
  • 如果要继续向/从Internet发送/接收消息,请使用HandlerThread

总而言之:AsyncTask已经是最简单,最简单的。此外,您不需要覆盖所有方法,只需覆盖doInBackGround()onPostExecute(),如果您想要接收数据。

请参阅:Asynctask vs Thread in android

答案 2 :(得分:0)

你总是可以使用AsyncTask.execute(() -> { /* network operations */ });,缺点是你没有得到任何回调,所以我倾向于只在原型设计或非常简单任务时使用它。 / p>

答案 3 :(得分:0)

在方法中使用匿名类:

public void asyncOperation () {
    new AsyncTask<Task, Void, Boolean>() {

        @Override
        protected Boolean doInBackground(String... params) {
            // Your background operation, network, database, etc
            return true;
        }
    }.execute();
}