1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.button1).setOnClickListener(
new
OnClickListener()
{
@Override
public
void
onClick(View v)
{
try
{
Thread.sleep(
10000
);
}
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
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
private
Handler mHandler =
new
Handler()
{
//参数:Message相当于一种信息的载体,可以将子线程的数据传到主线程中,也就是所谓的线程间通信了。。。
public
void
handleMessage(android.os.Message msg)
{
//该方法在主线程中执行,不信的话可以log的。。。
String
result = (
String
) msg.obj;
//从主线程传来的数据
switch
(msg.what)
//what用于标记谁传来的信息
{
case
1
:
mTextView1.setText(result);
//做UI组件的设置必须在主线程否则会报错的。。。
break
;
case
2
:
mTextView2.setText(result);
break
;
default
:
break
;
}
}
};
private
TextView mTextView1;
private
TextView mTextView2;
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView1 = (TextView) findViewById(R.id.textView1);
mTextView2 = (TextView) findViewById(R.id.textView2);
Button button1 = (Button) findViewById(R.id.button1);
button1.setOnClickListener(listener);
Button button2 = (Button) findViewById(R.id.button2);
button2.setOnClickListener(listener);
}
private
OnClickListener listener =
new
OnClickListener()
{
@Override
public
void
onClick(View v)
{
switch
(v.getId())
{
case
R.id.button1:
new
Thread()
{
public
void
run()
{
// 模拟耗时操作
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
String
result =
"从网络获取的结果"
;
Message msg =
new
Message();
msg.what =
1
;
msg.obj = result;
// 发送到main线程
mHandler.sendMessage(msg);
// textView.setText(result);
}
}.start();
Log.e(
"MainActivity"
,
"button1"
);
break
;
case
R.id.button2:
new
Thread()
{
public
void
run() {
// 模拟耗时操作
try
{
Thread.sleep(
1000
);
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
String
result =
"从数据库获取的结果"
;
Message msg =
new
Message();
msg.what =
2
;
msg.obj = result;
// 发送到main线程
mHandler.sendMessage(msg);
}
}.start();
Log.e(
"MainActivity"
,
"button2"
);
break
;
default
:
break
;
}
}
};
|
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
|
private
TextView mTextView;
private
Button mButton;
class
Listener
implements
OnClickListener
{
@Override
public
void
onClick(View v)
{
switch
(v.getId())
{
case
R.id.button1:
download();
break
;
default
:
break
;
}
}
}
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = (Button) findViewById(R.id.button1);
mButton.setOnClickListener(
new
Listener());
}
public
void
download()
{
new
PlayThread().start();
//开启子线程
}
class
PlayThread
extends
Thread
{
@Override
public
void
run()
{
// 这是子线程
try
{
Thread.sleep(
2000
);
//模拟从网络下载数据的耗时操作
}
catch
(InterruptedException e)
{
e.printStackTrace();
}
mButton.post(
new
Runnable()
//这里用的是view的post方法
{
//这里的内容将在主线程中显示
@Override
public
void
run()
{
mTextView.setText(
"yes 获取到数据了~~~"
);
}
});
}
}
|