Скачивание файла и парсинг в андроид?
Есть несколько подходов для решение данной задачи:
1. Скачать XML в файл и потом парсить этот файл.
2. Скачать XML в память и парсить его из памяти (плохой вариант. так как размер XML может быть большим).
Оба варианта стоит выполнять в AsyncTask-е. Процесс парсинга можно выполнять в этом же AsyncTask-е или же в другом, это зависит от поставленной задачи. Выполнять парсинг в основном потоке я не рекомендую, так как данная операция достаточно трудоемкая, особенно если большой размер XML-а.
Сложилось ощущение, что вы делаете запуск парсинга не после завершения асинхронного запроса, а после старта выполнения таски, прям в главном потоке.
Если это так, то нужно стартовать парсинг в методе onPostExecute вашей AsyncTask'и. А парсить ли XML асинхронно, или же прям на главном потоке - вопрос другой, но лучше, конечно, делать в AsyncTask.
А по поводу кэша - уточните ваш вопрос, что именно вы имеете ввиду? Если вообще про способы кэширования, то ответ будет такой: как таковых суперуниверсальных спец. средств кэширования нет. Можно использовать ContentProvide, DB, Shared preference и просто файл хранить в системе - уже зависит от конкретной задачи.