Android中的进程与多线程的讲解(Handler和AsyncTask)
来源:互联网 发布:网络教研室 编辑:程序博客网 时间:2024/06/06 04:39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package
com.example.l0902_anr;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.TextView;
public
class
MainActivity
extends
Activity {
private
Button btn;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.btn);
btn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
int
count=
0
;
while
(count<
1000
){
count++;
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
package
com.example.l0902_anr;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
public
class
MainActivity
extends
Activity {
private
Button btn,btn_stop;
private
Thread thread;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.btn);
btn_stop=(Button) findViewById(R.id.button1);
btn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
thread=
new
Thread(
new
Runnable() {
@Override
public
void
run() {
int
count=
0
;
while
(count<
1000
){
count++;
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
System.out.println(count);
}
}
});
thread.start();
//启动线程
}
});
btn_stop.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
thread.stop();
//停止线程
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package
com.example.l0902_anr;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.TextView;
public
class
MainActivity
extends
Activity {
private
Button btn;
private
TextView tv;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.btn);
tv=(TextView) findViewById(R.id.tv);
btn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
new
Thread(
new
Runnable() {
@Override
public
void
run() {
int
count=
0
;
while
(count<
1000
){
count++;
tv.setText(count+
""
);
//试图更新主UI线程
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
//启动线程
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package
com.example.l0902_handler;
import
android.annotation.SuppressLint;
import
android.app.Activity;
import
android.os.Bundle;
import
android.os.Handler;
import
android.os.Message;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.TextView;
public
class
MainActivity
extends
Activity {
private
Button btn_start,btn_stop;
private
TextView tv;
private
int
i=
0
;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_start=(Button) findViewById(R.id.button1);
btn_stop=(Button) findViewById(R.id.button2);
tv=(TextView) findViewById(R.id.textView1);
btn_start.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
//开始发送消息
handler.post(runnabl);
}
});
btn_stop.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
//停止发送消息
handler.removeCallbacks(runnabl);
}
});
}
//创建新的线程
private
Runnable runnabl=
new
Runnable() {
@Override
public
void
run() {
i++;
//使用Message封装非UI线程的消息
Message m=
new
Message();
//使用Message的arg1属性或者arg2属性传递int类型的消息效率高
m.arg1=i;
//使用Handler发送消息
handler.sendMessage(m);
}
};
@SuppressLint
(
"HandlerLeak"
)
private
Handler handler=
new
Handler(){
public
void
handleMessage(Message m){
System.out.println(m.arg1);
String str=m.arg1+
""
;
//注意:一定一定要记得TextView是String类型哦
tv.setText(str);
handler.post(runnabl);
}
};
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package
com.example.l0902_myasynctask;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
public
class
MainActivity
extends
Activity {
private
Button btn1,btn2;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button) findViewById(R.id.button1);
btn2=(Button) findViewById(R.id.button2);
btn1.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
try
{
//超过5秒了,其实就和前面的例子一样了(ANR错误)
Thread.sleep(
7000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
}
});
btn2.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
System.out.println(
"Hello To EveryOne"
);
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package
com.example.l0902_myasynctask;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
public
class
MainActivity
extends
Activity {
private
Button btn1,btn2;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn1=(Button) findViewById(R.id.button1);
btn2=(Button) findViewById(R.id.button2);
btn1.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
//创建AsyncTask并执行
new
MyAsyncTask().execute();
}
});
btn2.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
System.out.println(
"Hello To EveryOne"
);
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package
com.example.l0902_myasynctask;
import
android.os.AsyncTask;
/**
* 在后台创建线程,不会出现卡屏现象
* @author asus
*/
public
class
MyAsyncTask
extends
AsyncTask<Void, Void, String>{
//核心方法,在后台启动一个线程
@Override
protected
String doInVoid... params) {
try
{
Thread.sleep(
5000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
return
null
;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
package
com.example.l0902_usinganysc;
import
android.app.Activity;
import
android.os.Bundle;
import
android.view.View;
import
android.view.View.OnClickListener;
import
android.widget.Button;
import
android.widget.ProgressBar;
import
android.widget.TextView;
public
class
MainActivity
extends
Activity {
private
Button btn;
private
ProgressBar bar;
private
TextView tv;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn=(Button) findViewById(R.id.button1);
bar=(ProgressBar) findViewById(R.id.progressBar1);
tv=(TextView) findViewById(R.id.textView1);
tv.setText(
"开始下载"
);
btn.setOnClickListener(
new
OnClickListener() {
@Override
public
void
onClick(View v) {
MyAsyncTask my=
new
MyAsyncTask(tv, bar);
my.execute(
""
,
"i="
,
"打开文件"
);
//启动方法
}
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package
com.example.l0902_usinganysc;
import
android.os.AsyncTask;
import
android.widget.ProgressBar;
import
android.widget.TextView;
/**
* 总结:参数相关
* @author asus
*/
public
class
MyAsyncTask
extends
AsyncTask<String, Integer, String>{
private
ProgressBar bar;
private
TextView tv;
//构造方法,初始化ProgressBar和TextView
public
MyAsyncTask(TextView tv,ProgressBar bar){
this
.bar=bar;
this
.tv=tv;
}
/*
* 这个方法的参数不能改,其返回类型与第三个参数一致,其参数与第一个参数类型一致
* (non-Javadoc)
* @see android.os.AsyncTask#doInParams[])
*/
@Override
protected String doInString... params) {//可变参数
String p1=params[1];
String p2=params[2];
int i=1;
for(i=1;i<=100;i++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
publishProgress(i);
}
return p1+i+p2;//也作为下一个方法的参数
}
/*
* 当异步结束时触发此方法,其参数类型与第三个参数类型一致
* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(String result) {
if(result!=null){
tv.setText("下载完成"/*+result*/);
}
super.onPostExecute(result);
}
/*
* 当异步开始的时候触发
* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
System.out.println("异步开始");
tv.setText("开始下载");
super.onPreExecute();
}
/*
* 正在处理的时候触发,与主UI线程交互,其参数与第二个参数一致
* (non-Javadoc)
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected
void
onProgressUpdate(Integer... values) {
//第二个可变参数,由上面的publishProgress方法的参数决定
bar.setProgress(values[
0
]);
tv.setText(values[
0
]+
"%"
);
//可变参数就是这么用的,values[1]表示publishProgress的第二个参数
super
.onProgressUpdate(values);
}
}
from:http://wangzhaoli.blog.51cto.com/7607113/1287545
阅读全文
0 0
- 【代码】Android中的进程与多线程的讲解(Handler和AsyncTask)
- Android中的进程与多线程的讲解(Handler和AsyncTask)
- Android中的进程与多线程的讲解(Handler和AsyncTask)
- Android多线程、Handler和AsyncTask的用法
- android中的asynctask和handler的比较
- Android中的Handler和AsyncTask的区别
- Android中的Handler和AsyncTask的区别
- Android中的Handler和AsyncTask
- Android中的handler和AsyncTask
- android多线程编程之AsyncTask与Handler
- android多线程asyncTask与Handler用法
- Android的AsyncTask和Handler
- ProgressDialog 和 handler (Android中的多线程)
- Android AsyncTask与handler
- Android AsyncTask与handler
- Android AsyncTask与handler
- Android AsyncTask与handler
- Android AsyncTask与handler
- mysql通过my.ini更改默认字符集
- 机器学习笔记:Logistic回归
- hdu 5514 Frogs 欧拉函数
- 多态
- hdu 2074 叠筐
- Android中的进程与多线程的讲解(Handler和AsyncTask)
- 洛阳_HP:上课第4天
- cartographer源码分析(36)-io- outlier_removing_points_processor.h
- spring cloud 之 server-provider
- 2017年7月29日22:06:41
- Matlab_回归分析第二讲之Logistic回归
- css实现背景颜色透明,文字不透明
- Step 4:Processing基本函数绘制图形
- JavaScript学习--基本语法