让代码更简单

Android简单的异步任务AsyncTask使用方法

重要:本文最后更新于2022-11-08 19:26:11,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

据我了解,带Ui的编程语言中都不建议或者不允许在Ui线程执行耗时较长的操作,比如访问网络下载图片等资源,否则会将软件“卡死”系统会因软件UI无响应而选择杀死软件进程。安卓也是一样,为了不影响用户体验,安卓的耗时操作一般都在后台线程中完成,最常见的就是异步线程AsyncTask了。

Android集成腾讯X5浏览内核

Android集成腾讯X5浏览内核

异步任务顾名思义,就是你做你的我做我的,互不侵犯,下面是一个异步任务的代码构成。

复制
class getdepinfo extends AsyncTask< Map<String, String>, Void, String> {

    @Override
    protected void onPreExecute() {
        // progressDialog.show();
//异步任务开始
    }

    @Override
    protected String doInBackground( Map<String, String>... params) {
//耗时任务执行,这里是一个网络访问的任务
        return HttpHelper.submitPostData("http://10.0.2.2/api.php",params[0],"utf-8");

    }

    @Override
    protected void onProgressUpdate(Void... values) {
//这里是在异步任务执行过程中的UI交互
    }

    @Override
    protected void onPostExecute(String result) {
        //   progressDialog.dismiss();
    //异步任务执行完毕

    }
}

整个构成如上面代码所示,我标注了一些注释,我们通过

复制
new getdepinfo().execute(info);

来启动异步任务,后面的info则是传入的参数,这个参数会被传递到异步任务中的doInBackground方法里面的params参数,通过params[0]取出第一个参数,我这里只传了一个info参数,所以在doInBackground方法里面用params[0]来使用,第二个参数则是params[1]。

值得注意的是class getdepinfo extends AsyncTask< Map<String, String>, Void, String> 这句,这句话说明了异步任务中的doInBackground、onProgressUpdate、onPostExecute三个方法的返回或传入数据类型。第一个参数是doInBackground方法的传入参数类型,我这里用的Map<String, String>。第二个参数说明了onProgressUpdate方法无返回值,第三个说明onPostExecute方法返回字符串类型数据。在异步任务的这些方法里都可以直接操作UI线程更新UI。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐