- 1 : 2024/03/11(月) 16:34:27.772 ID:Sk3ApXhY7
- 状態管理とライフサイクル死んだ😭😭😭
- 2 : 2024/03/11(月) 16:37:40.267 ID:Sk3ApXhY7
- ライフサイクルが原因でリスナーが多重addされてるかもしくはremoveできずに残る😭
- 3 : 2024/03/11(月) 16:43:45.355 ID:Sk3ApXhY7
- 一応解決したは
- 4 : 2024/03/11(月) 16:43:50.390 ID:/OhnyzgJq
- もうちょいしっかり環境の説明したほうが良いと思う
いくら知識がある相手でもお前の思うがままにワード繰り出してたら「何言ってだコイツ」ってなるよ - 6 : 2024/03/11(月) 16:44:13.667 ID:Sk3ApXhY7
- >>4
説明したのに人こなかったらさみしいじゃん - 14 : 2024/03/11(月) 16:51:32.105 ID:egEWa0eOM
- >>4
しょーもない質問投げて環境は?って説教されるteratail民じゃん - 18 : 2024/03/11(月) 16:56:46.164 ID:Sk3ApXhY7
- >>14
あそこ500文字くらいで回答まとめたのに信用度足りませんとか言われて回答載せられなかったわ
クソすぎん? - 5 : 2024/03/11(月) 16:43:56.573 ID:Sk3ApXhY7
- でも処理上良くないな
どっかでメモリリーク起こしてるかも - 7 : 2024/03/11(月) 16:44:44.952 ID:Sk3ApXhY7
- 環境
AndroidStudio Hedgehog
Kotlin 1.8.10
JetpackCompose 1.6.1
lifecycle 2.7.0 - 8 : 2024/03/11(月) 16:45:40.260 ID:Sk3ApXhY7
- こんな感じのコードでサービス上にViewを表示してる
class AppService: LifecycleService(), SavedStateRegistryOwner {
private val savedStateRegistryController = SavedStateRegistryController.create(this)
override val savedStateRegistry: SavedStateRegistry
get() = savedStateRegistryController.savedStateRegistryprivate val params by lazy {
WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT
)
}private val windowManager by lazy {
getSystemService(Context.WINDOW_SERVICE) as WindowManager
}private val composeView by lazy {
ComposeView(this).apply {
setContent {
Text("Hello Compose")
}
}
}override fun onCreate() {
super.onCreate()
composeView.setViewTreeLifecycleOwner(this)
composeView.setViewTreeSavedStateRegistryOwner(this)
savedStateRegistryController.performRestore(null)
windowManager.addView(composeView, params)
}override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
super.onStartCommand(intent, flags, startId)
return START_NOT_STICKY
}override fun onDestroy() {
windowManager.removeView(composeView)
super.onDestroy()
}
} - 9 : 2024/03/11(月) 16:46:14.198 ID:Sk3ApXhY7
- setComposeの中に入るViewは別で、そこでエラーが起きてる
- 10 : 2024/03/11(月) 16:48:00.817 ID:/OhnyzgJq
- あーJetpackのお前か
見たことあるわ
いつも説明下手過ぎて人来なくて可哀想 - 23 : 2024/03/11(月) 17:04:56.905 ID:Sk3ApXhY7
- >>10
平均的サカ豚 - 11 : 2024/03/11(月) 16:49:16.883 ID:/nENwuBl5
- いい加減ここじゃないところでやったら
- 13 : 2024/03/11(月) 16:50:01.027 ID:Sk3ApXhY7
- データ管理用のオブジェクトクラスからデータを受け取って、変更が起きたときにリスナーから伝えて反映するって実装にしてるんや
こんな感じに@Preview
@Composable
private fun MyCompose(position: Int = 0) {
var title by remember { mutableStateOf(HogeData.getTitle(position)) }
var content by remember { mutableStateOf(HogeData.getContent(position)) }
var theme by remember { mutableStateOf(HogeData.getTheme(position)) }val updateListener: HogeData.OnPageUpdatedListener =
ListHelper.OnPageUpdatedListener { _, _ ->
System.out.println("呼ばれてるよー")
theme = HogeData.getTheme(position)
}HogeData.addOnUpdatedListener(updateListener)
- 15 : 2024/03/11(月) 16:52:57.683 ID:Sk3ApXhY7
- 変数themeを変更したときにUIが更新されるんやが、そん時に毎回リスナーが登録されてまう
こうしたらリスナー自体は多重にならなくなったけど、毎回Launchedされてるのって良くないように感じる
DisposableEffect(updateListener) {
HogeData.addOnUpdatedListener(updateListener)
onDispose {
HogeData.removeOnUpdatedListener(updateListener)
}
} - 16 : 2024/03/11(月) 16:53:14.928 ID:qQchik3wU
- ネームド狙いええってもう
- 21 : 2024/03/11(月) 17:00:47.850 ID:Sk3ApXhY7
- >>16
お前らはどう思うゲェジとか呼ばれたそうw
どういうことやゲェジにあこがれてそうw先生「はい、じゃあ皆目を閉じて黙祷!」←え、何の意味があるんやこれ
1:エッヂの名無し 2024/03/11(月) 14:00:36.540 ID:qQchik3wU
各々が自分の意志でやるならええけど先公に指示されてやっても何の意味も無いやろ
2:エッヂの名無し 2024/03/11(月) 14:02:56.073 ID:qQchik3wU
お前らはどう思う?
5:エッヂの名無し 2024/03/11(月) 14:05:55.742 ID:qQchik3wU
>>4
現役高校生やけど - 19 : 2024/03/11(月) 16:58:14.409 ID:Sk3ApXhY7
- 匿名掲示板初心者がぴーぴー喚いてて草
ある程度スレ伸ばしてから質問飛ばしたほうがいいんだよこういうのは😅 - 20 : 2024/03/11(月) 16:59:59.231 ID:AJL0YMK34
- chatGPTに聞いとけアホ
- 22 : 2024/03/11(月) 17:04:41.150 ID:mYLpx1pE9
- すまん、flutterでよくない?
- 25 : 2024/03/11(月) 17:08:08.820 ID:Sk3ApXhY7
- >>22
いや、iOSでリリースするつもり無いならAndroidStudioSDKのほうがいいよねw - 24 : 2024/03/11(月) 17:07:27.306 ID:goEFbh0Ca
- このゲェジってプログラミング以外にも大学講義の課題っぽいのもレス煽ってやらせようとしてなかったっけ?
- 26 : 2024/03/11(月) 17:08:56.568 ID:Sk3ApXhY7
- >>24
それC#ゲェジだろw
課題とか聞く要素ないし、それこそGPTで事足りるやんけ😅 - 28 : 2024/03/11(月) 17:10:14.846 ID:npFGGpqX9
- なんでこいつ質問側なのにキレてんだよ
普通この手の質問は回答者側が偉そうにするのに - 31 : 2024/03/11(月) 17:12:40.236 ID:Sk3ApXhY7
- >>28
どうせまともに答えねぇからな
回答してくれたら手のひら返してやるよ. - 29 : 2024/03/11(月) 17:10:51.240 ID:goEFbh0Ca
- まぁ無視安定か
- 30 : 2024/03/11(月) 17:11:00.142 ID:EzkK5N8AA
- いうて質問サイトで詳しく書けよっていうやつが詳しく書かれたあとにまともに答えてるのみたことないわ
- 32 : 2024/03/11(月) 17:13:03.197 ID:Sk3ApXhY7
- レスバしてたほうがドキュメント読むの捗るんだわw
- 35 : 2024/03/11(月) 17:17:53.256 ID:8LhgOYy6C
- 4月から下請けSIer行くんやがプログラミングのお勉強って何したらいいんや?
javaのオブジェクト指向の基礎知識やjspサーブレット等は学んだんやがその次のステップがわからん - 37 : 2024/03/11(月) 17:19:18.727 ID:1JRg/XbPl
- 基礎知識の範囲によるやろ😅
オブジェクト指向なんて、仮に本読んだだけとかならぶっちゃけコード読みにくくなるだけだぞw - 39 : 2024/03/11(月) 17:25:59.766 ID:1JRg/XbPl
- 勝手にComposeableが再構成されたときにLaunchedEffectが呼ばれてるんかとおもってたけど
再構成されたときに値が変わってそれで呼ばれてるんか
勘違いしとった
コメント