回答編集履歴
1
語弊のある表現を修正
answer
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
2019-10-05 11:30:18.049 10517-10555/com.example.myapp1 W/TestApp: EXCEPTION: Only the original thread that created a view hierarchy can touch its views.
|
24
24
|
```
|
25
25
|
|
26
|
-
では何がいけないのか?という疑問の答えとしては、既に他回答でいただいたように、ボタンが張り付いている画面の処理を担当しているUIスレッドの(少し語弊がある表現ですが)持ち物であるボタンに、別のスレッドであるタイマー用のスレッドから`Button#visibility`を書き換えている、と言う行為です。`INVISIBLE`にしてもOKだったのは、ラッキーだった程度のことで、これも本来はやってはいけません。`Button`や`TextView`などのUIの部品は、基本的にUIスレッドから触る必要があります。
|
26
|
+
では何がいけないのか?という疑問の答えとしては、既に他回答でいただいたように、ボタンが張り付いている画面の処理を担当しているUIスレッド~~の(少し語弊がある表現ですが)持ち物である~~のみが、描画関連処理を正しく完遂できるボタンに、別のスレッドであるタイマー用のスレッドから`Button#visibility`を書き換えている、と言う行為です。`INVISIBLE`にしてもOKだったのは、ラッキーだった程度のことで、これも本来はやってはいけません。`Button`や`TextView`などのUIの部品は、基本的にUIスレッドから触る必要があります。
|
27
27
|
|
28
28
|
そんな場合は、UIスレッド内で`Handler`クラスオブジェクトを生成し、`post`メソッドを用いてUIスレッド内で処理を行うようにします。(ここでは述べませんが、他の方法もあります)
|
29
29
|
|