public class AsyncTaskTask extends Activity {
TextView asynctask_textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.async_task);
asynctask_textView=(TextView) findViewById(R.id.asynctask_textview);
asynctask_textView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Asynctask task=new Asynctask();
task.execute();
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.async_task, menu);
return true;
}
class Asynctask extends AsyncTask<String, ProgressBar, String>{
//第一个String定义了task.execute()参数的数据类型,对应doInBackground(String... params)中的params。
//第二个ProgressBar指定进度显示条即onProgressUpdate(......)的类型。
//第三个String定义返回结果类型,即doinbackground(..)中的text,onPostExecute(...)中result的类型
@Override
protected String doInBackground(String... params) {//运行,此方法中不可对ui进行修改
// TODO Auto-generated method stub
String text="change";
return text;
}
@Override
protected void onCancelled(String result) {//取消
// TODO Auto-generated method stub
super.onCancelled(result);
}
@Override
protected void onPostExecute(String result) {//接受doinbackground的结果并显示,可对ui修改。
//result的值为return text。
// TODO Auto-generated method stub
asynctask_textView.setText(result);//修改textview内容为"change"
}
@Override
protected void onProgressUpdate(ProgressBar... values) {//doinbackground进度显示,无关痛痒
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}
}
}
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
doInBackground方法和onPostExecute的参数必须对应,这两个参数在AsyncTask声明的泛型参数列表中指定,第一个为doInBackground接受的参数,第二个为显示进度的参数,第第三个为doInBackground返回和onPostExecute传入的参数。
相关推荐
RxJava封装异步任务RxAsyncTask
自己写的一个winform小示例 用非常简短的几行代码演示C#5.0的异步编程新特性 不参杂其他无关代码,浅显易懂
这是ETTask中的Async部分,它是一个单线程的Task
class JPB_Async_Task extends WP_Async_Task { protected $action = 'save_post'; /** * Prepare data for the asynchronous request * * @throws Exception If for any reason ...
django-async-task
async-task-impl-6.11.0.jar
async-task-impl-6.10.0.jar
async-task-impl-6.11.0-sources.jar
async-task-impl-6.10.0-sources.jar
async-task-demo-6.10.0-sources.jar
android-clean-http-async-task.7z
使用async方法要定义async Task或者async Task<T> 最好不要定义async void方法来调用,async void是处理程序等,总结结论就是要使用async Task或者async Task 使用asyn方法,可以用同步的格式,执行异步的代码,如下...
漂亮任务 小库,帮助Android开发者轻松处理Async Task
网上async with和async for的中文资料比较少,我把PEP 492中的官方陈述翻译一下。 异步上下文管理器”async with” 异步上下文管理器指的是在enter和exit方法处能够暂停执行的上下文管理器。 为了实现这样的功能,...
Visual Studio C++ Opencv ASYNC
为文章 Async Await 异常处理 所写,主要展示四种典型情况下的异常处理。 async await; task.wait(); async 不 await; async void
Android Async-Http Demo
很好用的Async32,不用多说,你用了就知道啦。
同步、异步及多线程的使用(Task、Async、Await) Task线程的暂停、继续、取消 Task异步多线程调用中的死锁
async/await异步处理