Выступление Джошуа Блоха (автор «Effective Java», «Java Concurrency In Practice», работал в Google в роли Chief Java Architect): "How to design a good API and why it matters".
Можно попробовать сконфигурировать приложение как launcher. Оно будет вызываться по нажатию Home, и запустить что-то другое можно будет только из него.
Теоретически, для этого достаточно основной activity добавить в intent-filter
Если классы Download и DownloadBatch изменять нельзя — то никак, потому что состояние прогресса знает только loader, объявленный в DownloadBatch.download() и не существующий вне этого метода.
Если бы Вы следовали основным правилам Java (code conventions), такой проблемы вообще не возникло бы.
Во-первых, имена классов должны начинаться с большой буквы (а имена методов должны быть в camelCase, без подчёркиваний).
Во-вторых, использование default package считается дурным тоном; что Вам мешает дать пакету название?
1. Что собой представляет класс Aim? Если каждый экземпляр занимает больше ~40 байт, неудивительно, что массив на 84^4 элементов не помещается в 2 ГБ.
2. Какое исключение Вы пробовали ловить? OutOfMemoryException (которое бывает по разным причинам) не является потомком java.lang.Exception.