android – 使用onRetainNonConfigurationInstance的替代方法

我有一个应用程序可能会在应用程序使用期间为单个玩家跟踪大量数据,而我的应用程序一次最多允许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性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...