你真的会用AsyncTask吗?(一)
一个典型AsyncTask的。
01 |
public class DialogTestActivity extends Activity { |
02 |
private Button button1; |
03 |
private Task task; |
04 |
05 |
@Override |
06 |
public void onCreate(Bundle savedInstanceState) { |
07 |
super.onCreate(savedInstanceState); |
08 |
setContentView(R.layout.main); |
09 |
this.button1 = (Button) findViewById(R.id.button1); |
10 |
button1.setOnClickListener(new View.OnClickListener() { |
11 |
12 |
@Override |
13 |
public void onClick(View v) { |
14 |
if (task != null && task.getStatus() == AsyncTask.Status.RUNNING) { |
15 |
Toast.makeText(DialogTestActivity.this, "task 正在运行", Toast.LENGTH_SHORT).show(); |
16 |
//task.cancel(true); // 如果Task还在运行,则先取消它 |
17 |
} else { |
18 |
task = new Task(); |
19 |
task.execute(); |
20 |
} |
21 |
} |
22 |
}); |
23 |
} |
24 |
25 |
@Override |
26 |
protected void onDestroy() { |
27 |
super.onDestroy(); |
28 |
// 用户按回退的时候要取消正在进行的任务 |
29 |
task.cancel(true); |
30 |
} |
31 |
32 |
private class Task extends AsyncTask<Void, Void, Void> { |
33 |
|
34 |
@Override |
35 |
protected void onPreExecute() { |
36 |
super.onPreExecute(); |
37 |
Toast.makeText(DialogTestActivity.this, "task 开始运行", Toast.LENGTH_SHORT).show(); |
38 |
} |
39 |
|
40 |
@Override |
41 |
protected Void doInBackground(Void... params) { |
42 |
try { |
43 |
// 模拟耗时操作 比如网络连接等 |
44 |
Thread.sleep(5000); |
45 |
} catch (InterruptedException e) { |
46 |
e.printStackTrace(); |
47 |
} |
48 |
// 判断如果task已经cancel就没有必须继续进行下面的操作 |
49 |
if (!isCancelled()) { |
50 |
System.out.println("task 如果被cancel,就不会显示"); |
51 |
} |
52 |
return null; |
53 |
} |
54 |
55 |
@Override |
56 |
protected void onPostExecute(Void result) { |
57 |
super.onPostExecute(result); |
58 |
Toast.makeText(DialogTestActivity.this, "task 完成", Toast.LENGTH_SHORT).show(); |
59 |
// 所有调用当前context的对象要注意判断activity是否还存在 |
60 |
// 典型的比如弹窗 |
61 |
if (!isFinishing()) { |
62 |
try { |
63 |
createAlertDialog().show(); |
64 |
} catch (Exception e) { |
65 |
} |
66 |
} |
67 |
} |
68 |
69 |
@Override |
70 |
protected void onCancelled() { |
71 |
super.onCancelled(); |
72 |
System.out.println("task 取消"); |
73 |
} |
74 |
75 |
} |
76 |
77 |
private AlertDialog createAlertDialog() { |
78 |
return new AlertDialog.Builder(DialogTestActivity.this).setTitle("fadfasdf") |
79 |
.setPositiveButton("OK", new DialogInterface.OnClickListener() { |
80 |
public void onClick(DialogInterface dialog, int whichButton) { |
81 |
82 |
} |
83 |
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() { |
84 |
public void onClick(DialogInterface dialog, int whichButton) { |
85 |
86 |
} |
87 |
}).create(); |
88 |
} |
89 |
} |
你真的会用AsyncTask吗?(一)的更多相关文章
- Android开发者:你真的会用AsyncTask吗?
[导读]在Android应用开发的过程中,我们需要时刻注意保证应用程序的稳定和UI操作响应及时,因为不稳定或响应缓慢的应用将给应用带来不好的印象,严重的用户卸载你的APP,这样你的努力就没有体现的价值 ...
- Android Tips – 填坑手册
出于: androidChina http://www.androidchina.net/3595.html 学习 Android 至今,大大小小的坑没少踩,庆幸的是,在强大的搜索引擎与无私奉献的 ...
- android 开发从入门到精通
Android-Tips This is an awesome list of tips for android. If you are a beginner, this list will be t ...
- 阅读 Android源码的一些姿势
日常开发中怎么阅读源码 找到正确的源码 IDE 是日常经常用的东西,Eclipse 就不说了,直接从 Android Studio(基于 IntelliJ Community 版本改造)开始. 我们平 ...
- Android(java)学习笔记149:Android线程形态之 AsyncTask (异步任务)
1. AsyncTask和Handler的优缺点比较: 1)AsyncTask实现的原理和适用的优缺点 AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTa ...
- 使用过AsyncTask、EventBus、Volley以及Retrofit,必须好好了解handler运行机制
我们都知道在UI线程中不能进行耗时操作,例如数据读写.网络请求.Android 4.0开始,在主线程中进行网络请求甚至会抛出Android.os.NetworkOnMainThreadExceptio ...
- AsyncTask使用实例,异步加载图片
在上一篇,详细介绍了AsynTask的基础知识.没有读过的朋友可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4892310.html 那么在这篇文 ...
- Android中AsyncTask的使用 (包含文件的下载与存储)
今天看到大神写的相关详解Android中AsyncTask的使用,真的很是佩服,下面我将学习到的AsynTask知识运用到项目中,其中也涉及一些文件的下载与存储到本地 啥都不说了,直接上代码,我将对其 ...
- Android(java)学习笔记92:Android线程形态之 AsyncTask (异步任务)
1. AsyncTask和Handler的优缺点比较: 1)AsyncTask实现的原理和适用的优缺点 AsyncTask是Android提供的轻量级的异步类,可以直接继承AsyncTa ...
随机推荐
- So... what's up?
So... testing markdown editor what to learn in May? html5 canvas api codeigniter framework var test ...
- Asp.net MVC在View里动态捆绑压缩引用的js
前言 Asp.net MVC 4以上版本多了BundleConfig.RegisterBundles方法,可以把要捆绑的脚本或样式进行捆绑压缩,以减少客户端的请求次数从而提高了客户端的访问速度. 问题 ...
- 第六章:Javascript对象
对象是javascript的基本数据类型.对象是一种复合值.它将很多值(原始值 或者其他对象)聚合在一起.可通过名字访问这些值.对象也可以看做是属性的无序集合,每个属性都有一个名/值.属性名是字符串, ...
- 第二节Unity3D开发环境安装(windows系统)
这一节准备安装开发环境. 1. 首先先下载软件包:http://pan.baidu.com/s/1imYVv 4.2版本2.下载完后,解压会看到两个文件(运行第二个安装包) 3.准备安装,这 ...
- [转] 再探java基础——break和continue的用法
原文地址:http://blog.csdn.net/luoweifu/article/details/10756017 break break可用于循环和switch...case...语句中. 用于 ...
- selenium常见的疑问和问题
.确认(verifation)和断言(assert)有什么区别? 确认:当测试中的一个用例存在错误时,系统将会继续运行这些测试 断言:当测试中的一个用例存在错误时,系统将会退出当前用例 总而言之 ...
- BZOJ-1878 HH的项链 树状数组+莫队(离线处理)
1878: [SDOI2009]HH的项链 Time Limit: 4 Sec Memory Limit: 64 MB Submit: 2701 Solved: 1355 [Submit][Statu ...
- 【bzoj2463】 谁能赢呢?
www.lydsy.com/JudgeOnline/problem.php?id=2463 (题目链接) 题意 一个n*n的棋盘,开始时左上角有一个棋子,每次可以把棋子向4个方向移动,但不能移动到曾经 ...
- UVa 1347 Tour
Tour Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Description Joh ...
- (转)eclipse项目导入到android studio中
原文:http://www.cnblogs.com/lao-liang/p/5016541.html?utm_source=tuicool&utm_medium=referral Androi ...