Я дезацинирую свой xml в async-задаче. В каком-то конкретном случае я выхожу из памяти при десериализации. Я знаю, что есть флаг под названием 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);
}
}
}
Сколько из этих элементов детализации игры есть? –
На самом деле это не предел, возможно, у него 20 или может быть 80. Зависит от того, какая услуга присылает мне – Android
Итак, где все данные? В 'gameXml'? Насколько это велико? –