我有一个应用程序可能会在应用程序使用期间为单个玩家跟踪大量数据,而我的应用程序一次最多允许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.