スレッド処理【Android/Kotlin】



Kotlinで Thread クラスでのスレッドの作成とキャンセル処理を試してみた。






スレッド処理プロジェクトの全体の内容




画像のようにStartボタンを押すとスレッドを新規作成して処理を走らせる。スレッドで行う処理は1秒間隔でカウンタを1づつ上げそれを標準出力するものである。そしてStopボタンを押すとスレッドがキャンセルされる仕組みとなっている。

MainActivityクラスは次のようにプログラミングした。







Treadの作成


スレッドの新規作成とそのスレッドをスタートさせる基本的な形は次のようになる。

mWorker = Thread { 
	...
	//処理内容
}
mWorker.start()






Treadをキャンセルさせる


スレッドをキャンセルさせたい場合はinterrupt()メソッドで行う。

mWorker?.interrupt()


しかしこのままだとスレッド処理内で例外が投げられクラッシュしてしまうだろう。
そこでスレッド内の処理をtry-catchで囲んで上げる必要がある。さらにcatch内ではThread.currentThread().interrupt()を再び実行することで安全に確実にスレッドをキャンセルさせている。

try {
	...
	//処理内容
} catch (ex: InterruptedException) {
	Thread.currentThread().interrupt()
}






AtomicBoolean


AtomicBoolean複数スレッドから安全に同時アクセスできるboolean型である。
ここではカウンターはInt型になっているが、厳密にはAtomicIntegerを利用すべきなのかもしれない。


基本からしっかり身につくAndroidアプリ開発入門

圧倒的な多数のユーザーが使っているヤフーのアプリ。その制作の最前線にいる黒帯エンジニアが、ユーザーが使いやすいアプリの大切な基本をしっかりと解説します。

KindleAmazon

Kotlinプログラミング

Kotlinは、Javaとの相互運用を可能にし、Android OSでGoogleがフルサポートする静的型プログラミング言語です。この言語は、Javaだけでは十全ではない(Javaだけでは実装に手間がかかりすぎる)、軽量かつ豊かな表現形式や、他言語ではすでに実装されている最新の機能を盛り込んでいます。

KindleAmazon




参考


How to Kill a Java Thread
Create thread (Kotlin)
クラス AtomicBooleanについて。(stack overflow)


あなたにおすすめ