gpt4 book ai didi

android - 使用 onRetainNonConfigurationInstance 的替代方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:23 26 4
gpt4 key购买 nike

我有一个应用程序可能会在单个玩家使用应用程序期间跟踪大量数据,我的应用程序一次最多允许 5 个玩家,这意味着这些大量数据可能会增加 5 倍。

当 Activity 被销毁时,我将所有数据写入我的 SQLite 数据库,这工作正常。

问题发生在方向改变期间。我使用 onRetainNonConfigurationInstance 是因为我认为我至少可以依靠它来进行方向更改,但我发现 Android 中发生的其他事情可能会清除我的数据。用户报告的一些例子:

- While the app was running, the user took a phone call. After returning to the app, the data was gone.
- While the app was running, another user downloaded an update to a different app from the Market, and found the data gone after returning to the app.
- While the app was running, another user started a different app (a music player), and returned to find the data gone.

我知道 onRetainNonConfigurationInstance 的使用是个问题,因为我的应用程序最初将每个玩家的每个单独数据字段写入一个包中,而当应用程序以这种方式实现时,在几个月的过程中没有遇到任何问题。

当我发现 onRetainNonConfigurationInstance 并将其用于我的实现时,我就开始收到投诉。

我的实现很简单。我实现如下:

@Override
public Object onRetainNonConfigurationInstance()
{
return mPlayers; //array of player objects
}

然后在 onCreate 中,我这样做:

mPlayers = (PlayerData [])getLastNonConfigurationInstance();

由于似乎存在一些潜在问题,在屏幕旋转期间保留大量用户数据的最佳替代方案是什么?

感谢您的帮助!

最佳答案

使用 Bundle:onRetainNonConfigurationInstance 的问题在于它与应用程序进程的生命周期相关联,而即使进程完全终止,Bundle 也可以保存和恢复。

如果您要让人们离开并做可能导致进程被杀死的内存密集型事情,那么请使用 Bundle。

关于android - 使用 onRetainNonConfigurationInstance 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6353623/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com