Java 警告Android用户应用程序更新可能导致旧应用程序版本的数据丢失?

Java 警告Android用户应用程序更新可能导致旧应用程序版本的数据丢失?,java,android,mobile,Java,Android,Mobile,我正在为Android编写一个游戏。当用户完成一个级别时,如果丢失,他们可以从下一个级别重新启动(即,我需要存储一个整数以记住他们到达的级别)。如果应用程序在播放过程中被中断,我会将世界状态保存到磁盘(这是存储地图和游戏实体的复杂状态) 我想在将来保留更改游戏代码和世界状态保存/存储方式的选项。然而,我必须考虑当用户在手机上有一个旧版本的世界状态,因为他们在游戏的中间,他们升级应用程序,现在应用程序无法加载世界状态。 如果有某种方法可以避免这种情况,那么必须编写代码将旧版本的数据迁移到新版本的数

我正在为Android编写一个游戏。当用户完成一个级别时,如果丢失,他们可以从下一个级别重新启动(即,我需要存储一个整数以记住他们到达的级别)。如果应用程序在播放过程中被中断,我会将世界状态保存到磁盘(这是存储地图和游戏实体的复杂状态)

我想在将来保留更改游戏代码和世界状态保存/存储方式的选项。然而,我必须考虑当用户在手机上有一个旧版本的世界状态,因为他们在游戏的中间,他们升级应用程序,现在应用程序无法加载世界状态。 如果有某种方法可以避免这种情况,那么必须编写代码将旧版本的数据迁移到新版本的数据将是一种痛苦。如果我能让用户在更新之前完成当前正在进行的游戏,那就太好了。这能做到吗?还有其他选择吗

我不打算经常这样做。我想迭代开发我的游戏,同时获得一些早期的反馈,但如果我现在必须解决如何保存和恢复世界状态的问题,这是很困难的


我希望这看起来不是一个愚蠢的问题,但在PC或控制台上,有不能在游戏期间保存的游戏或只能在两个级别之间保存的游戏是完全可以的。我只是觉得Android有点麻烦,因为你必须对所有游戏都有一个保存游戏的策略。

你不能阻止用户升级应用程序,在安装(或升级)应用程序之前,你不能执行任何代码

坦率地说,由于升级而丢失数据是不可接受的。如果您使用SQLiteOpenHelper,您将自动获得帮助您完成升级过程的好挂钩


我知道你有一个相当复杂的savegame设置,但尽量保持它的灵活性,以便于升级。有很多技巧可以帮助你做到这一点


Android和PC完全不同——在PC上,你可以坐下来玩几个小时。在Android上,你玩得很快,然后做其他事情。或者,您玩游戏后接到一个电话,被迫退出游戏。

“我知道您的savegame设置相当复杂,但请尽量保持灵活性,以便轻松升级。有很多技术可以帮助您做到这一点。”你指的是什么技术?这取决于你的savegame文件的外观。它们是二进制的吗?ASCII码?他们有什么样的数据?他们如何存储数据?数组的值?键/值对?等等等等等等。。。。升级后,您需要显示您认为可能有问题的savegame文件的特定部分。例如,游戏中的每个外星人都有一个易于存储的x,y整数。然后它有一个行为对象,告诉外星人如何行动,例如,new CombineBhaviour(new ShootateEntity(PLAYER),new FlyInDirection(5,5))将使实体向玩家实体射击的行为与朝固定方向飞行的行为相结合。这些行为对象都非常简单,每个对象只存储几个整数,有时还引用其他实体。我之所以使用Java序列化,是因为我看不到任何简单的方法将我的行为对象转换为XML。那么,您看到的可能导致不兼容的场景是什么呢?比如说,不要将行为组合为两种行为,我可能希望将其概括为一系列行为,或者我可能会向FlyInDirection添加一个关于实体应该如何飞行的参数(例如,直线或之字形)。当然,我可以编写代码将数据从一种表示形式迁移到另一种表示形式,但这只需要更多的测试,意味着更多的编码。我希望你不要认为我很傻,但是当我在电脑上写游戏时,我不必考虑这些问题,这意味着我可以更积极地进行重构。我只是在考虑我所有的选择。