回答編集履歴
2
誤記訂正
answer
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
Handlerはそのインスタンスを生成したスレッド用のLooperへメッセージや処理(Runnable)を通知するためのクラスであり、Handlerへ処理やメッセージを登録してもそれは新たにスレッドを起こすといった意味合いはない(はず)と思います。ご質問のコードはアクティビティークラスですね?mHandlerはアクティビティーが生成されたと同時に生成されますのでこの場合は単に通知先がUIスレッド用のHandlerがあるというだけのことになります。
|
6
6
|
|
7
|
-
|
7
|
+
postDelayedはHandlerがLooperに対して「Xミリ秒後にこのハンドラーを起動してね」という具合に依頼してくれるメソッドです。本コードではハンドラー処理の最後で再びpostDelayedしているので「一定時間間隔で繰り返しハンドラーが起動する」動きになりますが、この動きをすることを感覚的に「スレッドを立ち上げた」と表現されたのだと思います。
|
8
8
|
|
9
9
|
|
10
10
|
さて、アクティビティーが非表示状態になったとき、前述したとおりUIスレッド以外のスレッドを自分で起動していたわけではないのでスレッドの停止を考える必要はありません。すべきことは「mHandlerに繰り返し登録している処理を断ち切る」ことです。そのためには以下のようにHandlerのremoveCallbacksを使えばよいと思います。要するに現在起動待機中の処理(Runnable)を登録解除すればそれ以上HandlerからLooperへ処理の起動依頼は起きなくなる(=繰り返し処理は止まる)ということですね。
|
1
誤字訂正
answer
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
postDelyaedはHandlerがLooperに対して「Xミリ秒後にこのハンドラーを起動してね」という具合に依頼してくれるメソッドです。本コードではハンドラー処理の最後で再びpostDelayedしているので「一定時間間隔で繰り返しハンドラーが起動する」動きになりますが、この動きをすることを感覚的に「スレッドを立ち上げた」と表現されたのだと思います。
|
8
8
|
|
9
9
|
|
10
|
-
さて、アクティビティーが非表示状態になったとき、
|
10
|
+
さて、アクティビティーが非表示状態になったとき、前述したとおりUIスレッド以外のスレッドを自分で起動していたわけではないのでスレッドの停止を考える必要はありません。すべきことは「mHandlerに繰り返し登録している処理を断ち切る」ことです。そのためには以下のようにHandlerのremoveCallbacksを使えばよいと思います。要するに現在起動待機中の処理(Runnable)を登録解除すればそれ以上HandlerからLooperへ処理の起動依頼は起きなくなる(=繰り返し処理は止まる)ということですね。
|
11
11
|
|
12
12
|
```java
|
13
13
|
public void onPause(){
|