Android 创建异步任务最简洁的方法是什么?

Android 创建异步任务最简洁的方法是什么?,android,android-asynctask,Android,Android Asynctask,我需要执行一个涉及网络的非常简单的操作。我知道这必须通过异步任务来完成,因为在主线程上运行涉及网络操作的任务是不好的 因为用经典的方法是非常冗长的 private class LongOperation extends AsyncTask<String, Void, String> { @Override protected String doInBackground(String... params) { //to do

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

因为用经典的方法是非常冗长的

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) {}
    }
私有类LongOperation扩展了异步任务{
@凌驾
受保护的字符串doInBackground(字符串…参数){
//做
返回“已执行”;
}
@凌驾
受保护的void onPostExecute(字符串结果){
//做
}
@凌驾
受保护的void onPreExecute(){}
@凌驾
受保护的void onProgressUpdate(void…值){}
}
对于只需下载少量位的方法静态方法调用


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

您不需要
异步任务。它只是一种方便的使用方式,因为它已经有了回调方法


您可以创建一个新的
线程
并在那里执行网络调用。

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

  • 如果您只想执行简单的网络操作,例如下载一些JSON数据,然后将其返回到更新UI:使用
    异步任务
  • 如果要执行长时间网络操作,其中涉及中到大量数据(上传或下载):请使用
    线程
  • 如果要连续向Internet发送/接收信息,请使用
    HandlerThread
总之:
AsyncTask
已经是最简单、最容易使用的了。此外,您不需要覆盖所有方法,只要覆盖
doInBackGround()
onPostExecute()
,就可以接收数据


请参阅:

您可以始终使用
AsyncTask.execute(()->{/*网络操作*/}),缺点是您不会得到任何回调,因此我倾向于仅在原型设计或非常简单的任务中使用此方法。

在方法中使用匿名类:

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

        @Override
        protected Boolean doInBackground(String... params) {
            // Your background operation, network, database, etc
            return true;
        }
    }.execute();
}
public void异步操作(){
新建异步任务(){
@凌驾
受保护的布尔doInBackground(字符串…参数){
//您的后台操作、网络、数据库等
返回true;
}
}.execute();
}

您不必覆盖所有这些menber函数。只有doInBackground()可以。@greenapps你是什么意思?那么你对他们有什么建议?@greenapps你看到我的结论了吗?我不能不说原因就给出建议@greenapps对于
长网络操作
,如果您建议一个线程我将使用一项服务,您将需要10秒的时间打开链接并获得您的答案(即使我同意应该在答案中复制)。好的。。。服务中的线程;-)。