我有一个应用程序,可能跟踪单个玩家在应用程序使用过程中的大量数据,而且我的应用程序一次最多可以允许5个玩家,这意味着大量数据可能会相乘times 5.替代使用onRetainNonConfigurationInstance
当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();
因为似乎有一些潜在的问题,什么是保存整个屏幕的大量用户数据的最佳替代品旋转?
感谢您的帮助!
谢谢Femi。让我再补充一点这个问题。我认为Bundle是更好的选择,但是推进的最佳方式是什么?例如,假设我有100个我想保留的字符串。可以将100个不同长度的独立字符串填充到Bundle中吗?或者我应该实现某种Bundle扩展?或者在这些情况下有什么可以更好的工作? – Michael 2011-06-16 02:24:09
Bundle将采用包括字符串在内的大多数基元的数组和ArrayLists。我过去做过的一件事情是,当我感到懒惰时,基本上只是用我想要的零散件构建一个JSON对象,然后将其序列化到Bundle中。在另一端反序列化它,你很好走。 – Femi 2011-06-16 02:36:33
好的,谢谢费米,我会试试看。 – Michael 2011-06-16 03:30:13