我正在编写一个通过表(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,这样它就不会崩溃?
非常感谢您。
答案 0 :(得分:1)
我认为问题不在您的onCreate
函数中。基本上,onCreate
是生命周期函数,它是在初始化Activity
或启动Activity
时调用的。如果在应用程序进入后台时遇到异常,请密切注意onPause
和onDestroy
函数。我猜这两个正在试图将某些意图传递给其他导致错误的活动或服务。
因此,您可以考虑在活动的onPause
方法中编写一些代码,这会将ID保存在SharedPreferences
或某些数据库中。然后,当您再次返回并再次恢复应用程序时,将调用onResume
函数并保留SharedPreferences
或数据库中的ID(无论您之前保存数据的位置如何)。
要了解如何在SharedPreferences
中保存数据,这里是developer's documentation。当然,我也建议您也研究activity lifecycle。