предварительное кэширование потоков exoplayer, вызывающее проблемы с производительностью - PullRequest
0 голосов
/ 08 июня 2018

Используя 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 кадров в секунду,скроллинг нервный).Почему это делает систему такой медленной, и как я могу заставить ее работать более плавно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...