在android 中我们一般用 Handler 做主线程 和 子线程 之间的通信 。
现在有了一种更为简洁的写法,就是 Activity 里面的 runOnUiThread( Runnable )方法。
利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。
Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程。
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
|
package
com.app;
import
android.os.Bundle;
import
android.support.v7.app.AppCompatActivity;
import
android.widget.Toast;
public
class
MainActivity
extends
AppCompatActivity {
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//创建一个线程
new
Thread(
new
Runnable() {
@Override
public
void
run() {
//延迟两秒
try
{
Thread.sleep(
2000
);
}
catch
(InterruptedException e) {
e.printStackTrace();
}
runOnUiThread(
new
Runnable() {
@Override
public
void
run() {
Toast.makeText(MainActivity.
this
,
"hah"
, Toast.LENGTH_SHORT).show();
}
});
}
}).start();
}
}
|
Activity的runOnUiThread(Runnable)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/**
* Runs the specified action on the UI thread. If the current thread is the UI
* thread, then the action is executed immediately. If the current thread is
* not the UI thread, the action is posted to the event queue of the UI thread.
*
* @param action the action to run on the UI thread
*/
public
final
void
runOnUiThread(Runnable action) {
if
(Thread.currentThread() != mUiThread) {
mHandler.post(action);
}
else
{
action.run();
}
}
|
转自https://www.cnblogs.com/zhaoyanjun/archive/2016/05/11/5483221.html