DustinChu Blog

android-Handler Message

網路抓取圖片,或是讀很大量的資料,如果在主執行緒中超過五秒還沒完成的話
會收到android系統的錯誤強制關閉,這時候需要把這些耗時的工作放在一個子執行續上
因為子執行緒涉及到UI更新,為了避免避免多個子執行緒去更新發生錯誤
為了避免這種錯誤,更新UI只能在主執行緒更新
由於Handler運行在主執行緒中(UI執行緒中),它與子執行緒可以通過Message對象來傳遞資料,

  • 最近比較常用到順便紀錄一下!!

注意

如果要使用要在Handler使用startActivity的話
因為上下文的關係 要注意Context

1
2
3
static Context mContext;
Intent intent = new Intent(mContext, InferenceActivity.class);
mContext.startActivity(intent);

Handler 範例

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
public class MainActivity extends AppCompatActivity {
@InjectView(R.id.btn_update)
Button mBtnUpdate;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_);
ButterKnife.inject(this);
}
@OnClick({R.id.btn_update})
public void onClick(View view) {
switch (view.getId()) {
case R.id.btn_update:
Login();
break;
}
}
private void Login() {
Runnable run = new Runnable() {
@Override
public void run() {
Message msg = new Message();
msg.what = 1000;
}
mHandler.sendMessage(msg);
}
};
new Thread(run).start();
}
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1000:
break;
case 1001:
break;
}
}
};
}

Handler 範例二

MainActivity

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
public class MainActivity extends AppCompatActivity {
@InjectView(R.id.btn_start)
Button mBtnStart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_);
ButterKnife.inject(this);
}
@OnClick(R.id.btn_start)
public void onClick(View view) {
DateUpdate dateUpdate = new DateUpdate();
}
public Handler getHandler() {
return this.mHandler;
}
Handler mHandler = new Handler() {
public void handleMessage(android.os.Message msg) {
switch (msg.what) {
case 1000:
//程式碼
break;
case 1001:
//程式碼
break;
}
}
};
}

DateUpdate

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
public class DateUpdate {
public DateUpdate() {
Runnable run = new Runnable() {
@Override
public void run() {
Message msg = new Message();
if () {
msg.what = 1000;
} else {
msg.what = 1001;
}
}
mHandler.sendMessage(msg);
}
};
new Thread(run).start();
}
StartSuccessActivity startSuccessActivity = new StartSuccessActivity();
Handler mHandler = startSuccessActivity.getHandler();
}

文章標題:android-Handler Message

文章作者:Dustinchu

發布時間:2017年10月02日 - 02:10

最後更新:2017年10月07日 - 14:10

原始連結:https://dustinchu.github.io/2017/10/02/android-HandlerMessage/

許可協議: 屬名-非商業性使用-禁止編譯 4.0 國際 轉載請保留原文連結及作者。

相關文章: