asynctask 线程池直接实例化么?

西西软件下载最安全的下载网站、值得信赖的软件下载站!
您的位置:
→ Android 多线程处理之多线程用法大集合
第 2 页 AsyncTask4.AsyncTask用异步任务架构多任务模型其实也不是很健壮,得创建多个AsyncTask实例。一个AsyncTask仅执行一次,不能重复执行,快餐类的线程,一次用完。实现AsyncTask子类,最重要的两个方法,一个是doInBackground(params);一个是onPostExecute(result)。在doInBackground()方法里处理耗时事务,并把结果返回,返回的值将在onPostExecute方法作为参数,然后就可以在onPostExecute()把结果展示在ui上面了。步骤:①实例化AsyncTask:实例化AsyncTask然后通过task.exec(pamas);传进去参数,这个参数列表是动态的,可以是一个也可以使多个,长度可变。  AsyncTask,第一个参数会传进去这个方法doInBackground(params),第二个参数是数据更新的值,第三个是处理事务返回的结果。②onPreExecute方法:这个方法没有参数,也没有返回值,可以在这个方法里,做一些提醒。比如show一个Dialog,或者弹个Toast告诉用户开始下载啦。③doInBackground(params)方法:进入AsyncTask内部结构,首先将执行reslut&doInBackground(params)方法,这个方法将处理耗时事务,exec()的参数将会传进这个方法做参数,而返回值将会作为onPostExecute()的参数。如果要更新进度的话,需执行publicProgress()方法。④onProgressUpdate(values)方法:这个方法的参数必须在doInBackground()方法里执行publicProgress()方法,这个方法将会把参数传递进onProgressUpdate()方法里,然后可以在这个方法做一些ui上的更新展示,比如进度条的值就可以通过这个values值动态改变。⑤onPostExecute(result)方法:这里就是事务处理完毕的走的方法,doInBackground方法执行的结果将传到这里,如果这个方法返回了数据。在这个方法里可以处理Ui,可以把处理完的数据展示在ui上。比如图片啊,文字啊,一切你想要的结果。private void loadImageByAsyncTask(final String url,final int id){//构建异步任务,这样就不用handler来处理消息了&&&&&&& DownloadTask task = new DownloadTask();&&&&&&& task.execute(&&+id,url);//AsyncTask不可重复执行&&& }&&& &&& class DownloadTask extends AsyncTask{&&&&&&&&&&&&&& @Override&&&&&&& protected Drawable doInBackground(String... params) {//params保存url和控件id两个数据&&&&&&&&&&& // TODO Auto-generated method stub&&&&&&&&&&& Log.e(&当前线程:&, &&+Thread.currentThread().getName());&&&&&&&&&&& Drawable drawable =&&&&&&&&&&& this.id = Integer.parseInt(params[0]);&&&&&&&&&&& try {&&&&&&&&&&&&&&& drawable = Drawable.createFromStream(new URL(params[1]).openStream(), &image.gif&);&&&&&&&&&&& } catch (MalformedURLException e) {&&&&&&&&&&&&&&& // TODO Auto-generated catch block&&&&&&&&&&&&&&& e.printStackTrace();&&&&&&&&&&& } catch (IOException e) {&&&&&&&&&&&&&&& // TODO Auto-generated catch block&&&&&&&&&&&&&&& e.printStackTrace();&&&&&&&&&&& }&&&&&&&&&&& &&&&&&&&&&&&&&&&&& }&&&&&&& @Override&&&&&&& protected void onPostExecute(Drawable result) {&&&&&&&&&&& // TODO Auto-generated method stub&&&&&&&&&&& super.onPostExecute(result);&&&&&&&&&&& ((ImageView)MainActivity.this.findViewById(id)).setImageDrawable(result);&&&&&&& }&&&&&&& @Override&&&&&&& protected void onPreExecute() {&&&&&&&&&&& // TODO Auto-generated method stub&&&&&&&&&&& super.onPreExecute();&&&&&&& }&&&&&&& @Override&&&&&&& protected void onProgressUpdate(Integer... values) {&&&&&&&&&&& // TODO Auto-generated method stub&&&&&&&&&&& super.onProgressUpdate(values);&&&&&&& }&&&&&&& &&& }这里打印的log
第2页: AsyncTask
阅读本文后您有什么感想? 已有
人给出评价!
访问量多的扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
Android开发--AsyncTask异步任务(二)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口五十、AsyncTask的使用方法和理解 - gentle_girl - 博客园
随笔 - 150
1、对于耗时的操作,我们的一般方法是开启&子线程&。如果需要更新UI,则需要使用handler
2、如果耗时的操作太多,那么我们需要开启太多的子线程,这就会给系统带来巨大的负担,随之也会带来性能方面的问题。在这种情况下我们就可以考虑使用类AsyncTask来异步执行任务,不需要子线程和handler,就可以完成异步操作和刷新UI。
3、AsyncTask:对线程间的通讯做了包装,是后台线程和UI线程可以简易通讯:后台线程执行异步任务,将result告知UI线程。
4、使用方法:共分为两步,自定义AsyncTask,在耗时的地方调用自定义的AsyncTask。可以参照以下代码示例。
step1:继承AsyncTask&Params,Progress,Result&
& & & & & &Params:输入参数。对应的是调用自定义的AsyncTask的类中调用excute()方法中传递的参数。如果不需要传递参数,则直接设为Void即可。
& & & & & &Progress:子线程执行的百分比
& & & & & &Result:返回值类型。和doInBackground()方法的返回值类型保持一致。
step2:实现以下几个方法:执行时机和作用看示例代码,以下对返回值类型和参数进行说明
& & & & & onPreExecute():无返回值类型。不传参数
& & & & & doInBackground(Params... params):返回值类型和Result保持一致。参数:若无就传递Void;若有,就可用Params
& & & & & publishProgress(Params... params):在执行此方法的时候会直接调用onProgressUpdate(Params... values)
& & & & & onProgressUpdate(Params... values):无返回值类型。参数:若无就传递Void;若有,就可用Progress
& & & & & onPostExecute(Result &result) :无返回值类型。参数:和Result保持一致。
step3:在调用自定义的AsyncTask类中生成对象;
& & & & & 执行 &:对象.excute(Params... params);
& &1) Task的实例必须在UI thread中创建
&&& 2) execute方法必须在UI thread中调用
&&& 3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground=\'#\'" onProgressUpdate(Progress...)这几个方法
&&& 4) 该task只能被执行一次,否则多次调用时将会出现异常
示例代码:
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello , Welcome to Andy's Blog!"/&
android:id="@+id/download"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Download"/&
android:id="@+id/tv"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="当前进度显示"/&
&ProgressBar
android:id="@+id/pb"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleHorizontal"/&
&/LinearLayout&
package sn.
import android.content.C
import android.os.AsyncT
import android.util.L
import android.widget.ProgressB
import android.widget.TextV
public class DownloadTask extends AsyncTask&Integer, Integer, String& {
//后面尖括号内分别是参数(线程休息时间),进度(publishProgress用到),返回值 类型
private Context mContext=null;
private ProgressBar mProgressBar=null;
private TextView mTextView=null;
public DownloadTask(Context context,ProgressBar pb,TextView tv){
this.mContext=
this.mProgressBar=
this.mTextView=
* 第一个执行的方法
* 执行时机:在执行实际的后台操作前,被UI 线程调用
* 作用:可以在该方法中做一些准备工作,如在界面上显示一个进度条,或者一些控件的实例化,这个方法可以不用实现。
* @see android.os.AsyncTask#onPreExecute()
protected void onPreExecute() {
// TODO Auto-generated method stub
Log.d("sn", "00000");
super.onPreExecute();
* 执行时机:在onPreExecute 方法执行后马上执行,该方法运行在后台线程中
* 作用:主要负责执行那些很耗时的后台处理工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
* @see android.os.AsyncTask#doInBackground(Params[])
protected String doInBackground(Integer... params) {
// TODO Auto-generated method stub
Log.d("sn", "1111111");
for(int i=0;i&=100;i++){
mProgressBar.setProgress(i);
publishProgress(i);
Thread.sleep(params[0]);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return "执行完毕";
* 执行时机:这个函数在doInBackground调用publishProgress时被调用后,UI 线程将调用这个方法.虽然此方法只有一个参数,但此参数是一个数组,可以用values[i]来调用
* 作用:在界面上展示任务的进展情况,例如通过一个进度条进行展示。此实例中,该方法会被执行100次
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
Log.d("sn", "");
mTextView.setText(values[0]+"%");
super.onProgressUpdate(values);
* 执行时机:在doInBackground 执行完成后,将被UI 线程调用
* 作用:后台的计算结果将通过该方法传递到UI 线程,并且在界面上展示给用户
* result:上面doInBackground执行后的返回值,所以这里是"执行完毕"
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
Log.d("sn", "");
super.onPostExecute(result);
package sn.
import android.app.A
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import android.widget.ProgressB
import android.widget.TextV
public class AsyncTaskDemoActivity extends Activity {
/** Called when the activity is first created. */
private TextV
private ProgressB
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initView();
private void initView() {
// TODO Auto-generated method stub
tv=(TextView)findViewById(R.id.tv);
pb=(ProgressBar)findViewById(R.id.pb);
download=(Button)findViewById(R.id.download);
download.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
DownloadTask dt=new DownloadTask(AsyncTaskDemoActivity.this,pb,tv);
dt.execute(100);
http://blog.csdn.net/cjjky/article/details/6684959
http://blog.csdn.net/zhenyongyuan123/article/details/5850389
/thread--1.html}

我要回帖

更多关于 asynctask cancel 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信