удалять файл изображения с помощью uri, когда пользователь закрывает приложение [дубликат]

Fetch не использует cookie по умолчанию. Чтобы включить cookie, сделайте следующее:

fetch(url, {
  credentials: "same-origin"
}).then(...).catch(...);
178
задан hpique 26 June 2011 в 19:13
поделиться

5 ответов

Это то, что я обычно делаю:

File outputDir = context.getCacheDir(); // context being the Activity pointer
File outputFile = File.createTempFile("prefix", "extension", outputDir);

Что касается их удаления, я тоже не уверен. Поскольку я использую это в своей реализации кеша, я вручную удаляю самые старые файлы, пока размер каталога кэша не снизится до моего заданного значения.

239
ответ дан sparkymat 18 August 2018 в 22:35
поделиться
  • 1
    Вот что я делаю. Мое предположение заключается в том, что createTempFile не создает реальные временные файлы, если он не использует реестр кеша, но это не документировано. – hpique 26 June 2011 в 19:26
  • 2
    могу ли я предположить, что файл останется до тех пор, пока приложение работает, даже если другие приложения также запускаются и создают свои собственные временные файлы? – android developer 30 July 2013 в 09:57
  • 3
    Каждое приложение использует собственный кеш: по умолчанию файлы, сохраненные во внутреннем хранилище, являются приватными для вашего приложения, а другие приложения не могут получить к ним доступ (а также не могут). Если вы хотите кэшировать некоторые данные, вы должны использовать getCacheDir (), чтобы открыть файл, в котором ваше приложение должно сохранять временные файлы кеша. Когда устройство находится на низком внутреннем пространстве памяти, Android может удалить эти кеш-файлы для восстановления пространства. Однако вы не должны полагаться на систему, чтобы очистить эти файлы для вас. Источник – felixd 22 October 2013 в 22:38
  • 4
    Могу ли я использовать намерение поделиться этим файлом? – aks 5 September 2016 в 17:41

Лучшие практики в внутренних и внешних временных файлах:

Внутренний кэш

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

Когда устройство находится на низком внутреннем пространстве памяти, Android может удалить эти кеш-файлы для восстановления пространства. Однако вы не должны полагаться на систему, чтобы очистить эти файлы для вас. Вы всегда должны хранить файлы кеша самостоятельно и оставаться в пределах разумного предела потребляемого пространства, например 1 МБ. Когда пользователь удаляет ваше приложение, эти файлы удаляются.

Внешний кэш

Чтобы открыть файл, представляющий внешний где вы должны сохранить файлы кеша, вызовите getExternalCacheDir(). Если пользователь отключает ваше приложение, эти файлы будут автоматически удалены.

Как упомянуто выше ContextCompat.getExternalFilesDirs(), вы также можете получить доступ к каталогу кэша во вторичном внешнем хранилище (если доступно), вызвав ContextCompat.getExternalCacheDirs().

Совет. Чтобы сохранить файловое пространство и поддерживать производительность вашего приложения, важно тщательно управлять своими файлами кеша и удалять те, которые больше не нужны в течение всего жизненного цикла вашего приложения.

84
ответ дан Antonio 18 August 2018 в 22:35
поделиться
  • 1
    Это не отвечает на вопрос о том, что делать с большими временными файлами. Какая здесь самая лучшая практика? Я подозреваю, что нет никого, кроме простого управления обычным файлом. – Merk 17 September 2015 в 20:08

Вы можете использовать метод File.deleteOnExit()

https://developer.android.com/reference/java/io/File.html#deleteOnExit ()

Здесь указывается https://developer.android.com/reference/java/io/File.html#createTempFile (java.lang.String , java.lang.String, java.io.File)

0
ответ дан kotucz 18 August 2018 в 22:35
поделиться
  • 1
    Это довольно бесполезно для Android из-за странного вкуса JVM (почти никогда не заканчивается) – weaknespase 8 February 2017 в 16:50
  • 2
    До тех пор, пока нет проблем с производительностью, удалите, освободите или отбросьте данные немедленно, когда вам это больше не нужно. – Redwolf 17 July 2017 в 22:22

Для временных внутренних файлов у них есть 2 варианта

1.

File file; 
file = File.createTempFile(filename, null, this.getCacheDir());

2.

File file
file = new File(this.getCacheDir(), filename);

Обе опции добавляют файлы в кэш приложений и, таким образом, можно очистить, чтобы сделать пространство необходимым, но опция 1 добавит случайное число в конце имени файла, чтобы сохранить файлы уникальными. Он также добавит расширение файла, которое является .tmp по умолчанию, но оно может быть установлено на все, используя 2-й параметр. Использование случайного числа означает, что, несмотря на указание имени файла, оно не остается таким же, как число добавляется вместе с расширением суффикса / файла (.tmp по умолчанию), например, вы указываете свое имя файла как internal_file и выходите как internal_file1456345.tmp. Если вы можете указать расширение, вы не можете указать добавленный номер. Однако вы можете найти имя файла, которое оно генерирует с помощью file.getName();, но вам нужно будет его хранить где-нибудь, чтобы вы могли использовать его, когда захотите, например, удалить или прочитать файл. Поэтому по этой причине я предпочитаю второй вариант, так как имя файла, которое вы указываете, является созданным именем файла.

26
ответ дан Snakist_へびーん 18 August 2018 в 22:35
поделиться
  • 1
    Могу ли я предположить, что временные файлы будут удалены только тогда, когда процесс приложения не будет сохранен? – android developer 27 October 2014 в 16:12
  • 2
    @androiddeveloper No. – Guilherme Bernal 17 October 2015 в 17:52
  • 3
    – android developer 17 October 2015 в 21:00
  • 4
    @androiddeveloper Извините, что не сообщал подробности раньше. Пользователь может открыть приложение, затем перейти к настройкам, очистить его кеш, а затем вернуться к приложению, все без его уничтожения. Поэтому приложение не может предположить, что файл кеша не будет удален, и ничто не остановит сам андроид без взаимодействия с пользователем. – Guilherme Bernal 17 October 2015 в 21:14
  • 5
    @GuilhermeBernal Я имел в виду, если это делается автоматически ОС ... – android developer 17 October 2015 в 23:10

Вы можете использовать dir кеша, используя context.getCacheDir () .

File temp=File.createTempFile("prefix","suffix",context.getCacheDir());
12
ответ дан TheRealChx101 18 August 2018 в 22:35
поделиться
  • 1
    Файл temp = File.createTempFile («префикс», «суффикс»), context.getCacheDir ()); – Patrick 2 May 2012 в 15:18
  • 2
    Спасибо, я сделал это, но размер моего файла равен 0B, где проблема, какие-то идеи? – user7856586 22 March 2018 в 11:23
Другие вопросы по тегам:

Похожие вопросы: