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