Используя exoplayer 2.8.1, тестирование на Android API версии 22. Я создаю фабрики кеша и источников данных, используя следующий код:
private static final long DEFAULT_MAX_CACHE_SIZE = 20*1024*1024L;
cacheEvictor = new LeastRecentlyUsedCacheEvictor(DEFAULT_MAX_CACHE_SIZE);
cache = new SimpleCache(
new File(context.getExternalCacheDir(), "exoplayer-cache"),
cacheEvictor);
uncachedDataSourceFactory = new OkHttpDataSourceFactory(
new OkHttpClient(),
"Android.ExoPlayer",
null);
dataSourceFactory =
new CacheDataSourceFactory(
cache,
uncachedDataSourceFactory);
Затем я предварительно кеширую стандартный аудиоконтент HTTP, используя следующий код:
new Thread (new Runnable () {
public void run() {
try {
CacheUtil.cache(
new DataSpec(uri, DataSpec.FLAG_ALLOW_CACHING_UNKNOWN_LENGTH | DataSpec.FLAG_ALLOW_GZIP),
cache,
uncachedDataSourceFactory.createDataSource(),
null,
null);
} catch (IOException e) {
callback.invoke(false, "Error: " + e.getMessage());
} catch (InterruptedException e) {
callback.invoke(false, "Download interrupted");
}
callback.invoke(true);
}
}).start();
Это прекрасно работает на эмуляторе, однако при попытке сделать это на реальном телефоне телефон становится очень не отвечающим во время загрузки кэшированного элемента (анимация падает до 4-5 кадров в секунду,скроллинг нервный).Почему это делает систему такой медленной, и как я могу заставить ее работать более плавно?