Это связано с отложенной инициализацией строк часового пояса. Только первый
звонок займет это много времени. Если SimpleDateFormat используется снова после этого, это
загружается из кеша и больше не должен занимать так много времени.
До того, как это было изменено, это было сделано, когда класс был загружен и, таким образом, начало
активность заняла эти 2-3 секунды дольше. Это оказало гораздо худшее влияние на пользователя
опыт, чем если бы это займет те секунды, когда он на самом деле используется в первый раз.
проблема в том, что сейчас нет способа обойти эту проблему из-за дизайна
интерфейса SimpleDateFormat. Только более быстрые телефоны могут исправить это, просто принимая меньше
время собирать эти строки.
Кэширование происходит в DateFormatSymbols, который использует SimpleDateFormat. От
повторное использование этого экземпляра можно загрузить только один раз (для
такая же лола). Вы также можете создать этот экземпляр в потоке при запуске
активность, так что он уже кешируется, как только он используется. Чтобы начать строки просто позвоните
.hashCode (), который принудительно инициализирует кеш. Немного быстрее, но не так просто
быть для сериализации экземпляра. Это также вызывает инициализацию кэша.
Тем временем рассмотрите возможность использования AsyncTask для «разогрева» SimpleDateFormat в вашем процессе, прежде чем он вам понадобится. Просто проанализируйте некоторую дату в AsyncTask doInBackground (), чтобы заставить ее загружать часовые пояса когда-нибудь, когда это не сильно повлияет на пользователя. После инициализации в вашем процессе SimpleDateFormat будет работать быстро, пока ваш процесс не будет остановлен.