置于背景中时,React-Native应用程序崩溃

时间:2019-06-22 08:00:13

标签: android react-native react-native-android

我正在编写一个通过表(react-native-table-component)和图表(react-native-chart-svg)呈现一堆数据的应用程序。原始基础数据可能重约150 kB。

当我将应用程序置于后台时,它崩溃:

Fatal Exception: java.lang.RuntimeException
android.os.TransactionTooLargeException: data parcel size 852488 bytes

我想可能是因为我的活动(我只有一个)使用了savedInstanceState

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // ATTENTION: This was auto-generated to handle app links.
    Intent appLinkIntent = getIntent();
    String appLinkAction = appLinkIntent.getAction();
    Uri appLinkData = appLinkIntent.getData();
    _askForOverlayPermission();
}

当我将我的应用程序置于后台时,它会尝试保存状态,该状态太大。当前,状态数据包含每个“数据块”的ID,然后包含与该数据块相对应的数据(权重更大)。我想知道是否有办法说:“如果应用程序要在后台运行,请删除所有数据,只保留id,这样它就不会崩溃?

非常感谢您。

1 个答案:

答案 0 :(得分:1)

我认为问题不在您的onCreate函数中。基本上,onCreate是生命周期函数,它是在初始化Activity或启动Activity时调用的。如果在应用程序进入后台时遇到异常,请密切注意onPauseonDestroy函数。我猜这两个正在试图将某些意图传递给其他导致错误的活动或服务。

因此,您可以考虑在活动的onPause方法中编写一些代码,这会将ID保存在SharedPreferences或某些数据库中。然后,当您再次返回并再次恢复应用程序时,将调用onResume函数并保留SharedPreferences或数据库中的ID(无论您之前保存数据的位置如何)。

要了解如何在SharedPreferences中保存数据,这里是developer's documentation。当然,我也建议您也研究activity lifecycle