Одна странная вещь в этом состоит в том, что сбой происходит только каждый 2-й или 3-й раз, когда приложение запускается, поэтому я полагаю, что память, используемая приложением, не собирается для мусора при каждом закрытии приложения.
Это, безусловно, возможно, и если это так, то, вероятно, это связано с утечкой памяти, которая может быть прослежена до того, что делает ваше приложение. Я думаю, что вы должны сосредоточить свои первоначальные усилия на исследовании этого аспекта ... вместо того, чтобы загружать файл порциями. (Я не знаком с цепочкой инструментов Android, но уверен, что она включает профилировщики использования памяти или анализаторы дампов памяти.)
EDIT
В ответ на ваш дополнительный комментарий тот факт, что он работает 2 раза в 3, говорит о том, что ваше приложение должно работать примерно как есть. По общему признанию, у вас нет большой свободы действий, если входной файл становится больше.
Пара идей:
Вместо чтения файла в строку и запуска анализатора JSON в строке, используйте анализатор, который может читать непосредственно из потока. Вашему текущему решению требуется место для двух полных копий данных в памяти, пока вы выполняете анализ.
Если файл становится намного больше, вам, возможно, придется подумать о дизайне, который не создает полное представление данных в памяти.
Я не уверен, что читать JSON-файл в «чанках» - это хорошая идея. Это может создать проблемы для синтаксического анализа JSON ... в зависимости от того, что именно вы подразумеваете под чтением блоков.
РЕДАКТИРОВАТЬ 2
Возможно, вам нужен синтаксический анализатор JSON типа "SAX like"; например http://code.google.com/p/async-json-library/