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

据我了解,带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。

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/242170.html

(0)
上一篇 2022年4月7日 17:08
下一篇 2022年4月7日 17:08

相关推荐

发表回复

登录后才能评论