- Webエンジニア
- アウトバウンド営業
- Webエンジニア(リーダー)
- 他17件の職種
- 開発
- ビジネス
※弊社のエンジニア記事になります。
Android Coroutines Async の挙動を確認したのでメモとして残しておく
- 準備環境情報
suspend関数作成
例外発生用のsuspend関数作成
ログ表示用のLiveData用意しておく - まずは基本asyncを使わず普通にsuspendを呼び出す
asyncを使ってみる - asyncとsuspend関数を組み合わせたときの実行順番2つのawaitの間で別のsuspendを実行
2つのasyncの間で別のsuspendを実行 - 特殊な実装をした場合2つのasyncを実行し、片方のawaitを呼ばない
1つ目のasyncをlaunch前に実行して、launch内部でawaitする - 例外を絡めた挙動
1.準備
// Coroutines
dependencies {
<省略>
def coroutines_android_version = '1.6.0'
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_android_version"
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_android_version"
<省略>
}
suspend関数作成
まずはasyncで動作させるsuspend関数を作成
suspend fun mySuspend(name: String, delayTimeMillis: Long): Int {
return withContext(Dispatchers.Default) {
log.emit("---------start mySuspend() $name---------")
var result = 0
(1..5).forEach {
result += (1..100).random()
delay(delayTimeMillis)
log.emit("mySuspend() $name - $it")
}
log.emit("---------finish mySuspend() $name---------")
return@withContext result
}
例外発生用のsuspend関数作成
例外を発生させる関数も作っておく
@Suppress("UNREACHABLE_CODE")
suspend fun error(name: String, crashTime: Int = 5): Int {
withContext(Dispatchers.Default) {
log.emit("---------start error() $name---------")
(crashTime downTo 0).forEach {
if (it <= 0) {
log.emit("throw Exception!")
throw Exception("error")
}
log.emit("throw Exception まで あと${it}秒")
delay(1000L)
}
log.emit("---------finish error() $name---------")
}
return (1..100).random()
}
ログ表示用のLiveData用意しておく
TextViewにログを表示するために実装(必須ではない)
val log = MutableSharedFlow<String>(replay = 100)
val logTextLiveData: LiveData<String> = log.mapLatest {
Log.d("my_log", it)
val stringBuilder = StringBuilder()
log.replayCache.forEach {
stringBuilder.append(it)
stringBuilder.append("\n")
}
stringBuilder.toString()
}.asLiveData()
記事の続きは以下URLからご覧ください。
https://rightcode.co.jp/blog/information-technology/kotlin-coroutines-async
【2024年卒】新卒採用エントリー開始しました!
特設ページはこちら:https://rightcode.co.jp/recruit/entry-2024
インターン募集!未経験ok、チャレンジ精神ある方求む
ゲームプランナー:https://rightcode.co.jp/recruit/intern-game-planner
メディア運営:https://rightcode.co.jp/recruit/intern-media
社長と一杯飲みながらお話しませんか?(転職者向け)
特設ページはこちら: https://rightcode.co.jp/gohan-sake-president-talk
もっとワクワクする仕事をしたいあなたへ
現在、ライトコードでは「WEBエンジニア」「スマホアプリエンジニア」「ゲームエンジニア」、「デザイナー」「WEBディレクター」「エンジニアリングマネージャー」「営業」などを積極採用中です!
有名WEBサービスやアプリの受託開発などの企画、開発案件が目白押しの状況です。
- もっと大きなことに挑戦したい!
- エンジニアとしてもっと成長したい!
- モダンな技術に触れたい!
現状に満足していない方は、まずは、エンジニアとしても第一線を走り続ける弊社代表と気軽にお話してみませんか?
ネット上では、ちょっとユルそうな会社に感じると思いますが(笑)、
実は技術力に定評があり、沢山の実績を残している会社ということをお伝えしたいと思っております。
- ライトコードの魅力を知っていただきたい!
- 社風や文化なども知っていただきたい!
- 技術に対して熱意のある方に入社していただきたい!
一度、【Wantedly内の弊社ページ】や【コーポレートサイト】をのぞいてみてください。
【コーポレートサイト】https://rightcode.co.jp/
【採用募集】https://rightcode.co.jp/recruit(こちらからの応募がスムーズ)
【wantedlyぺージ】https://www.wantedly.com/companies/rightcode