Как включить кэширование HTTP-ответов в DownloadManager?

Я хочу, чтобы повторные запросы URL-адреса обслуживались из локального кэша, а не перезагружались с сервера. Я использую DownloadManager, надеясь, что это будет удобной альтернативой HttpURLConnection ( увидел, что это рекомендуется), но по умолчанию кэширование ответов не выполняется. Вот мой тестовый код:

final Context context = getContext();
final DownloadManager manager =
  Android.ensureSystemService( DownloadManager.class, context );
final DownloadManager.Request req =
  new DownloadManager.Request( Uri.parse( BIG_FILE_URL ));
req.setNotificationVisibility( VISIBILITY_HIDDEN ); // hiding from user
context.registerReceiver( new BroadcastReceiver()
{
    public void onReceive( final Context context, final Intent intent )
    {
        context.unregisterReceiver( this ); // one shot for this test
        final long id = intent.getLongExtra( EXTRA_DOWNLOAD_ID, -1L );
        System.err.println( " --- downloaded id=" + id );
        System.err.println( " --- uri=" +
          manager.getUriForDownloadedFile(id) );
    }
}, new IntentFilter( ACTION_DOWNLOAD_COMPLETE ));
manager.enqueue( req );

Запустив вышеупомянутый тест дважды, я вижу два GET запросы на удаленном сервере (каждый с 200 ответ) и следующее в локальном журнале Android:

20:14:27.574 D/DownloadManager( 1591): [1] Starting
20:14:28.256 D/DownloadManager( 1591): [1] Finished with status SUCCESS
20:14:28.263 W/System.err( 2203):  --- downloaded id=1
20:14:28.269 W/System.err( 2203):  --- uri=content://downloads/my_downloads/1
20:15:13.904 D/DownloadManager( 1591): [2] Starting
20:15:14.517 D/DownloadManager( 1591): [2] Finished with status SUCCESS
20:15:14.537 W/System.err( 2203):  --- downloaded id=2
20:15:14.541 W/System.err( 2203):  --- uri=content://downloads/my_downloads/2

Так что скачал BIG_FILE дважды и сохранил его в двух файлах. Вместо этого я хочу кэширование ответов. Может ли DownloadManager делать кеширование ответов?


PS. Похоже, нет. Поэтому я исправил рекомендацию, которая привела меня сюда ( см. Ред. 22).

PPS. Чтобы быть уверенным, я протестировал стандартный HttpResponseCache. Это не влияет на DownloadManagerхотя он включает кеширование по умолчанию для каждого HttpURLConnection,

1 ответ

DownloadService по умолчанию загружает во временный пункт назначения. Встроенная возможность кэширования запросов отсутствует, однако вы можете запросить список загрузок, запрошенных ранее, с помощью метода DownloadManager.query().

Другие вопросы по тегам