Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Nativeコードからの値をStateFlowで受け取ってみた
Search
kazaman
December 22, 2020
Programming
1.6k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Nativeコードからの値をStateFlowで受け取ってみた
kazaman
December 22, 2020
Other Decks in Programming
See All in Programming
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
600
信頼性の目標を誰も求めてない
shubox
0
490
PyO3 で既存 Python 評価器を Rust core 化する ー wasm-bindgen でブラウザにも配るための設計
kdash
1
560
【DroidKaigi 2026】「アクセシビリティを利用するとき、 アクセシビリティもまたこちらを利用している」 〜マルウェアによる攻撃と防衛について〜
halunoyo
0
410
AWS Step Functions 大規模並列の壁を越える / jaws-sonic-2026-niigata-step-functions
kasacchiful
PRO
0
390
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
55
36k
DroidKaigi 2026 「個人開発という実験場: Android エンジニアが手にする4つの自由」
slashnephy
0
220
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
Family mrubyの進捗
kishima
1
100
MIZARU@SPAJAM2026 第二回予選
1901drama
0
110
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.8k
LLMは4年分のCompose移行を再現できるのか?実プロダクト279件のXMLで探る自動化の境界線
makun
0
440
Featured
See All Featured
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
430
Evolving SEO for Evolving Search Engines
ryanjones
0
280
YesSQL, Process and Tooling at Scale
rocio
174
15k
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
600
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
The Invisible Side of Design
smashingmag
301
52k
Product Roadmaps are Hard
iamctodd
55
13k
[SF Ruby Conf 2025] Rails X
palkan
2
1.4k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
930
Are puppies a ranking factor?
jonoalderson
2
3.9k
Transcript
Nativeコードからの値を StateFlowで受け取ってみた potatotips #72 2020/12/22(Tue) kazaman97
自己紹介 kazaman 株式会社ゼネテック : 社会人 1 年目 Android ハマっている! でも歴としては、空いてる期間もあるけど
1 年くらい 最近業務の方でも行うようになった potatotips 初参加にして初発表なので温かい目で、、、 github: @kazaman97
なんでこの議題なの?? 業務で NDK を使い Native コードを Android 上で動かす必要があった Native 側では、処理が終わるまで常に動作させており、結果を出力し続ける
その結果を受け取り、画面に表示させなければならない! しかし、 ( 自分が ) やり方を見つけられなかったで自分なりに行ってみた!
(Android Dagashi より [ https://androiddagashi.github.io/issue/147-2020-11-22/ ]) なにかいい方法がないかと 探していたら見つけた記事 このStateFlowを 使えばうまいこと
できそう??
StateFlow StateFlow は、状態保持用の監視可能な Flow で、現在の状態や状態更新の情報をコレ クタに出力します。 (https://developer.android.com/kotlin/flow/stateflow-and-sharedflow より引用 ) StateFlowを使えばNativeからの最新値を常に受け取れそう!
StateFlowの使い方 1 2 3 1. 外からは値の変更をできないようにし、 更新された値を流せるようにするため、 privateでMutableStateFlowを定義する 2. 外からは読み取り専用でアクセスできるようにするため、
StateFlowにする 3. 値を発行させる箇所に、 定義したMutableStateFlowのvalueに値を入れる 初期値が必要!
サンプルで作成したアプリ 1. EditText にカウントダウンしたい 数値を入れる 2. 「スタート」ボタンを押したら 入力した数値が TextView に表示さ
れ、 1 秒ずつカウントダウンを開始する 3. 0 もしくは「ストップ」ボタンを押したらカ ウントダウンが終了する カウントダウンアプリ画面 カウントダウン処理を Nativeで行わせる https://github.com/kazaman97/sample-jni-flow
Nativeコード 1 秒ずつカウントダウンする C++ コード 1. start 関数を呼んだら カウントダウン処理を実行する 2.
カウントダウン処理時中に 現在のタイムを出力し続ける 3. カウント処理が 0 になる、もしくは stop 関 数を呼んだら止まる スタート処理 ストップ処理 カウント ダウン処理 JVM側に値を 渡す処理
Nativeの関数呼び出し `start` 関数を呼び出すと Native 側のコードが呼び出される `onUpdateTime` は Native 側から、 現在のカウントダウン値を渡すときに呼ば
れる `currentTime` で 今回 UI 側に値渡しする StateFlow Native 実装やり取りをするためのコード Nativeからの値 を受け取る
①. JNI(Nativeコードとマネージ コードを連携するインターフェース ) を使ってJVM側に 値を渡す 値を渡す ②. MutableStateFlowに値を渡す ③.
値を受け取るときは 使いたい箇所でcollectするだけ!
UI側での処理 コルーチンを作成し、その中で、 collect す る collect して受け取った値を TextView に セットする
1 秒ずつカウントダウンする C++ コード
実際の動作 実際に動かしてみると、 Native で処理したカウントダウン値がしっか り流れてきている!
まとめ StateFlow を使うと Native 側の値を簡単に受け取り UI 反映ができる コルーチンを使っているのでバックグラウンドスレッドで値受け取りもできる 業務の方は、まだ Listener
方式で直していない
ご清聴ありがとうございました♂