2015-05-04 2 views
0

Службы Android могут быть убиты операционной системой в любое время. Нет гарантированных вызовов жизненного цикла, таких как onDestroy(), на которые вы можете положиться. Я должен реализовать службу, выполняющую много длительных задач и кучу файловых операций в фоновом режиме. Поэтому я задаю следующие вопросы:Операции с файлами в сервисе Android

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

Я думаю, что я не стану первым, у кого есть этот вопрос/вопрос, но я ничего не нашел в Google или SO. Заранее спасибо.

ответ

1

Услуги Android могут быть убиты операционной системой в любое возможное время.

Более точно, Android приложения процессы могут погибнуть от операционной системы в любой момент.

Нет надежных вызовов жизненного цикла, таких как onDestroy(), на которые можно положиться.

Исправить. onDestroy(), скорее всего, будет вызван, но он не гарантируется.

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

Практически любое программное обеспечение, большее, чем «привет, мир», соответствует этому описанию.

Как правило, это хорошая идея сделать это в любом виде обслуживания?

У вас нет большого выбора. Служба - это то, что помогает поддерживать ваш процесс, когда он больше не находится на переднем плане с точки зрения пользовательского интерфейса. Если вы не используете услугу, срок ее службы, вероятно, будет составлять порядка минут, а может быть и меньше. При обслуживании срок службы вашего процесса может составлять несколько часов, хотя он сильно зависит от устройства (например, объем оперативной памяти системы) и пользователя (например, как занят пользователь и сколько других приложений хотят выполнять фоновые работы).

Что происходит с дескриптором открытого файла при уничтожении процесса?

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

Есть ли предпочтительный способ достижения этой

Я понятия не имею, что «это».

нравится использовать переднюю часть обслуживания?

Есть три основные модели для использования переднего плана обслуживания:

  • Краткие сделки. Например, K9 Mail использует службу переднего плана, пока он проверяет новые сообщения, но только в течение этого короткого окна.

  • Операции, управляемые пользователем. Это обычный вариант использования переднего плана. Например, музыкальные проигрыватели обычно используют переднюю часть воспроизведения музыки.

  • «Я собираюсь попытаться жить вечно». Это не особенно практично, поскольку услуги на переднем плане не живут вечно. Пользователи также раздражаются услугами переднего плана, где они не понимают, что они получают в качестве компромисса для потребления ОЗУ/ЦП системы, а также всегда отображаемого значка уведомления.

Независимо от того, подходит ли какой-либо из этих шаблонов вашему проекту, вам нужно будет определить для себя.

Смежные вопросы