プログラミング詳しい人助けて😭😭

記事サムネイル
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.savedStateRegistry

private 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が呼ばれてるんかとおもってたけど
再構成されたときに値が変わってそれで呼ばれてるんか
勘違いしとった

コメント

タイトルとURLをコピーしました