簡體   English   中英

當應用程序進入后台時,Jetpack Compose rememberSaveable() 導致崩潰

[英]Jetpack Compose rememberSaveable() leads to crash when an app goes to background

我已將撰寫版本更新為 1.0.0-beta01 並在應用程序進入后台時面臨崩潰

java.lang.RuntimeException: Parcel: unable to marshal value androidx.compose.runtime.SnapshotMutableStateImpl@efa375c at android.os.Parcel.writeValue(Parcel.java:1885) at android.os.Parcel.writeList(Parcel.java:1092 ) at android.os.Parcel.writeValue(Parcel.java:1832) at android.os.Parcel.writeMapInternal(Parcel.java:943) at android.os.Parcel.writeMap(Parcel.java:925) at android.os .Parcel.writeValue(Parcel.java:1797) at android.os.Parcel.writeMapInternal(Parcel.java:943) at android.os.Parcel.writeMap(Parcel.Z93F725A07423FE1C889F448B33D21F46 Z:925) at android.os.Parcel.writeValue(Parcel.java:1797) at android.os.Parcel.writeList(Parcel.java:1092) at android.os.Parcel.writeValue(Parcel.java:1832) at android.os.Parcel.writeArrayMapInternal(Parcel.java:975) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620) at android.os.Bundle.writeToParcel(Bundle.java:1303) at android.os.Parcel .writeBundle(Parcel.java:1044) at android.os.Parcel.writeValue(Parcel.java:1801) at android.os.Parcel.writeArrayMapInternal(Parcel.Z93F725A07423FE1C889F448B33D21F 46Z:975) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620) at android.os.Bundle.writeToParcel(Bundle.java:1303) at android.os.Parcel.writeBundle(Parcel.java:1044) at android.os.Parcel.writeValue(Parcel.java:1801) at android.os.Parcel.writeArrayMapInternal(Parcel.java:975) at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1620) at android.os.Bundle .writeToParcel(Bundle.java:1303) at android.app.IActivityTaskManager$Stub$Proxy.activityStopped(IActivityTaskManager.java:4389) at android.app .servertransaction.PendingTransactionActions$StopInfo.run(PendingTransactionActions.java:145) at android.os.Handler.handleCallback(Handler.java:938) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os. Looper.loop(Looper.java:223) at android.app.ActivityThread.main(ActivityThread.java:7656) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$ MethodAndArgsCaller.run(RuntimeInit.java:592) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

var email by rememberSaveable { mutableStateOf("") }

如果我只是將 rememberSaveable() 更改為 remember() 一切正常。

這是一個錯誤,其修復將在 beta02 中發布: https://issuetracker.google.com/issues/180042685

那里提到了一個臨時解決方法,您可以這樣做:

var email by rememberSaveable(saver = stateSaver()) { mutableStateOf("") }

其中stateSaver()定義為:

fun <T> stateSaver() = Saver<MutableState<T>, Any>(
    save = { state -> state.value ?: "null" },
    restore = { value ->
        @Suppress("UNCHECKED_CAST")
        mutableStateOf((if (value == "null") null else value) as T)
    }
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM