package com.andbase.demo.activity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import com.ab.activity.AbActivity; import com.ab.task.AbTask; import com.ab.task.AbTaskItem; import com.ab.task.AbTaskListener; import com.ab.task.AbTaskObjectListener; import com.ab.task.thread.AbTaskPool; import com.ab.task.thread.AbTaskQueue; import com.ab.util.AbDialogUtil; import com.ab.util.AbToastUtil; import com.ab.view.titlebar.AbTitleBar; import com.andbase.R; import com.andbase.global.MyApplication; /** * 异步的使用参照 * http://www.amsoft.cn/post-133.html * @author 还如一梦中 * */ public class ThreadControlActivity extends AbActivity { private MyApplication application; private AbTitleBar mAbTitleBar = null; private AbTaskQueue mAbTaskQueue; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setAbContentView(R.layout.thread_main); application = (MyApplication)abApplication; mAbTitleBar = this.getTitleBar(); mAbTitleBar.setTitleText(R.string.thread_name); mAbTitleBar.setLogo(R.drawable.button_selector_back); mAbTitleBar.setTitleBarBackground(R.drawable.top_bg); mAbTitleBar.setTitleTextMargin(10, 0, 0, 0); mAbTitleBar.setLogoLine(R.drawable.line); initTitleRightLayout(); Button threadBtn = (Button)this.findViewById(R.id.threadBtn); Button queueBtn = (Button)this.findViewById(R.id.queueBtn); Button poolBtn = (Button)this.findViewById(R.id.poolBtn); Button taskBtn1 = (Button)this.findViewById(R.id.taskBtn1); Button taskBtn2 = (Button)this.findViewById(R.id.taskBtn2); //单个线程 threadBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //显示进度框 AbDialogUtil.showProgressDialog(ThreadControlActivity.this,R.drawable.progress_circular,"正在查询..."); AbTask mAbTask = AbTask.newInstance(); //定义异步执行的对象 final AbTaskItem item = new AbTaskItem(); item.setListener(new AbTaskListener() { @Override public void update() { AbDialogUtil.removeDialog(ThreadControlActivity.this); AbToastUtil.showToast(ThreadControlActivity.this,"执行完成"); } @Override public void get() { try { AbToastUtil.showToastInThread(ThreadControlActivity.this,"开始执行"); Thread.sleep(3000); //下面写要执行的代码,如下载数据 } catch (Exception e) { } }; }); //开始执行 mAbTask.execute(item); } }); //线程队列 mAbTaskQueue = AbTaskQueue.newInstance(); queueBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //显示进度框 AbDialogUtil.showProgressDialog(ThreadControlActivity.this,R.drawable.progress_circular,"正在查询..."); //获取队列 //定义异步执行的对象 AbTaskItem item1 = new AbTaskItem(); item1.setListener(new AbTaskObjectListener() { @SuppressWarnings("unchecked") @Override public String getObject() { String msg1 = "amsoft"; AbToastUtil.showToastInThread(ThreadControlActivity.this,"开始执行1,"+msg1); try { Thread.sleep(2000); } catch (Exception e) { } //下面写要执行的代码,如下载数据 return msg1; } @Override public <T> void update(T obj) { AbToastUtil.showToast(ThreadControlActivity.this,"执行完成1,"+(String)obj); } }); AbTaskItem item2 = new AbTaskItem(); item2.setListener(new AbTaskListener() { @Override public void update() { AbToastUtil.showToast(ThreadControlActivity.this,"执行完成2"); AbDialogUtil.removeDialog(ThreadControlActivity.this); } @Override public void get() { try { String msg1 = "amsoft"; Thread.sleep(2000); AbToastUtil.showToastInThread(ThreadControlActivity.this,"开始执行2"); //下面写要执行的代码,如下载数据 } catch (Exception e) { } }; }); //开始执行 mAbTaskQueue.execute(item1); mAbTaskQueue.execute(item2); //强制停止 //mAbTaskQueue.cancel(true); //强制停止前面的请求 //mAbTaskQueue.execute(item2,true); } }); //线程池 poolBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { //显示进度框 AbDialogUtil.showProgressDialog(ThreadControlActivity.this,R.drawable.progress_circular,"正在查询..."); AbTaskPool mAbTaskPool = AbTaskPool.getInstance(); //定义异步执行的对象 final AbTaskItem item = new AbTaskItem(); item.setListener(new AbTaskListener() { @Override public void update() { AbDialogUtil.removeDialog(ThreadControlActivity.this); AbToastUtil.showToast(ThreadControlActivity.this,"执行完成"); } @Override public void get() { try { AbToastUtil.showToastInThread(ThreadControlActivity.this,"开始执行"); Thread.sleep(1000); //下面写要执行的代码,如下载数据 } catch (Exception e) { } }; }); //开始执行 mAbTaskPool.execute(item); } }); //异步任务(void) taskBtn1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { AbDialogUtil.showProgressDialog(ThreadControlActivity.this,R.drawable.progress_circular,"正在查询..."); AbTask task = AbTask.newInstance(); //定义异步执行的对象 final AbTaskItem item = new AbTaskItem(); item.setListener(new AbTaskListener() { @Override public void update() { AbDialogUtil.removeDialog(ThreadControlActivity.this); AbToastUtil.showToast(ThreadControlActivity.this,"执行完成"); } @Override public void get() { try { AbToastUtil.showToastInThread(ThreadControlActivity.this,"开始执行"); Thread.sleep(3000); //下面写要执行的代码,如下载数据 } catch (Exception e) { } }; }); task.execute(item); } }); //异步任务(对象) taskBtn2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View arg0) { AbDialogUtil.showProgressDialog(ThreadControlActivity.this,R.drawable.progress_circular,"正在查询..."); //执行任务 loadObjectDataTask(); } }); } private void initTitleRightLayout(){ mAbTitleBar.clearRightView(); } @Override protected void onResume() { super.onResume(); initTitleRightLayout(); } public void onPause() { super.onPause(); } public void loadObjectDataTask(){ AbTask task = new AbTask(); final AbTaskItem item = new AbTaskItem(); item.setListener(new AbTaskObjectListener(){ @Override public <T> void update(T entity) { AbDialogUtil.removeDialog(ThreadControlActivity.this); AbToastUtil.showToast(ThreadControlActivity.this,(String)entity); Log.d("TAG", "执行完成:"+(String)entity); } @SuppressWarnings("unchecked") @Override public String getObject() { String result = null; try { Thread.sleep(3000); result = "hello andbase"; } catch (Exception e) { e.printStackTrace(); } return result; } }); task.execute(item); //task.cancel(mayInterruptIfRunning) } @Override public void finish() { if(mAbTaskQueue!=null){ mAbTaskQueue.cancel(true); } super.finish(); } }