我解散 - 在異步任務中序列化我的xml。在某些特定情況下,我將在反序列化時出現內存不足錯誤。我知道有一個名爲largeHeap
的標誌,我可以在我的應用程序中使用它。但是有沒有什麼辦法可以在那個地方特意避開。在XML反序列化期間內存不足
根據我的發現System.gc()
不是解決問題的最佳解決方案。任何人都可以幫助我解決這個問題。以下是代碼片段。
private HashMap<String, Game> games = new HashMap<String, Game>();
public void load(LocalDatabaseHelper localDbHelper) throws Exception
{
synchronized(gameLockObject) {
GameDetailDAO dao = new GameDetailDAO(localDbHelper);
//this will fetch me the all the entities from databse
ArrayList<GameDetailEntity> dbGameDetails = dao.getEntities(null, null);
for (GameDetailEntity gameDetail : dbGameDetails) {
String gameLevel = gameDetail.getDetailLevel();
String gameXml = gameDetail.getGameData();
Game game = null;
if(gameLevel.equalsIgnoreCase("Novice")) {
game = Job.deserialiseJob(gameXml, NoviceLevel.class);
}
else if (gameLevel.equalsIgnoreCase("Expert")) {
game = Job.deserialiseJob(gameXml, ExpertLevel.class);
}
//set the job version
game.setGameversion(gameDetail.getGameVersion());
game.setMagicNumber(gameDetail.getMagicNumber());
game.setInactiveUser(gameDetail.getInactiveUser());
game.setStartTime(gameDetail.getStartTime());
game.setFinishTime(gameDetail.getFinishTime());
game.setGameCompletionTime(gameDetail.getGameCompletionTime());
if (!StringUtils.isNullOrEmpty(gameDetail.getGameStatus())) {
game.setGameStatus(GameStatus.valueOf(gameDetail.getGameStatus()));
}
//add the job to the store
games.put(gameDetail.getGameRef().toLowerCase(Locale.getDefault()), game);
}
}
}
那裏有多少個遊戲細節實體? – 2014-09-22 16:51:36
不是一個限制,它可能有20個,也可能有80個。取決於發送給我的服務 – Android 2014-09-22 16:53:13
那麼,所有數據在哪裏?在'gameXml'中?它有多大? – 2014-09-22 16:54:52