teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

語弊のある表現を修正

2019/10/05 03:29

投稿

dodox86
dodox86

スコア9416

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