700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用AsyncTask类实现简单的异步处理操作

使用AsyncTask类实现简单的异步处理操作

时间:2020-12-05 06:10:47

相关推荐

使用AsyncTask类实现简单的异步处理操作

AsyncTask:

1.这是一种相比Handler更轻量级的处理异步任务的工具类

2.它和Handler类一样,都是为了不影响主线程(UI)而使用的((注:UI的更新只能在主线程中完成)

3.这个工具类提供了三个泛型的参数:

params:启动或执行任务的输入参数,例如:HTTP请求的URL

Progress:后台任务执行的百分比

Result:后台执行任务最终返回的结果,比如String

使用AsyncTask最少要重写这两个方法:

1.doInBackground(params··)

此方法在后台执行,比较耗时的操作都可以放在这里执行;

这里不能直接操作UI(主线程),此方法在后台线程执行;完成任务的主要工作,通常需要很长世间;

在此执行过程中可以调用publishProgress()来更新工作进度。

2.onPostExecute(Result)

相当于Handler处理UI的方式;

可以使用在doInBackground得到的结果处理和操作UI;

此方法在主线程中执行,任务执行的结果作为参数的返回。

如果有必要还可以重写一下三个方法:

onProgressUpdate();

这里可以使用进度条来显示任务执行的进度情况,用来增加用户体验。(此方法在主线程中执行)

onPreExecute();

这里是用户调用Execute的接口,当任务执行之前开始调用此方法;

可以在这里显示进度对话框

onCancelled();

此方法是用户调用取消的时候,自动调用的方法

使用AsyncTask类应当注意的地方:

1.此类的实例必须在主线程(UI交互)

2.execute方法必须在UIthread中调用;

3.不能手动调用自己重写的onPreExecute()等方法

4.该任务只能执行一次,多次调用会出现异常

一般情况下AsuncTask实例的运行过程:

1.AsyncTask.execute(URL)>>>onPreExecute()>>>doInBackground(String... params)>>>onPostExecute(String s)>>>ShowInTextView!

文字解释:使用execute()方法传入一个URL,onPreEXEcute()在执行doInBackground(String···params)之前先行加载,doInBackground(String···params)方法接收到的URL以数据方式存放在params中,所以可以使用一下步骤来实现读取URL数据,并从网络上获取数据的步骤,

具体的代码:

URL Url = new URL(params[0]);URLConnection connection = Url.openConnection();InputStream inputStream = connection.getInputStream();InputStreamReader ISR = new InputStreamReader(inputStream);BufferedReader bufferedReader = new BufferedReader(ISR);String line;StringBuilder builder = new StringBuilder();while ((line = bufferedReader.readLine())!=null){builder.append(line);}bufferedReader.close();inputStream.close();return builder.toString();

//这里返回的String数据内容,会被onPostExecute(String s)接收,其中的内容就保存在S中

//可用重写其方法,来将从网页获得的数据进行处理,比如说在一个TextView中显示

@Override

protected void onPostExecute(String s) {

tvShow.setText(s);

super.onPostExecute(s);

}

//若是不在这个方法里添加将数据内容发布的代码,就会执行系统中的原始代码,

//但是在源码中,onPostExecute(String s)是一个抽象的方法,还未实现,所以若不重写

//onPostExecute(String s)将不执行任何操作

//并且经过查看源代码,这些重写的方法在源代码中都是抽象状态,没有任何的执行内容!

2.onProgressUpdate(Void... values)可以在任务运行中调用,用来发布任务进度,提升用户体验

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。