Это в конечном итоге дойдет до вашего вопроса, но я сначала хочу затронуть ряд вопросов, которые вы поднимаете в своих различных комментариях к различным ответам, уже приведенным на момент написания этой статьи. У меня нет намерения передумать - скорее, это здесь для других, кто придет читать этот пост в будущем.
Дело в том, что я не могу позволить Android определять, когда мое приложение будет закрыто. это должен быть выбор пользователя.
Миллионы людей совершенно довольны моделью, в которой среда закрывает приложение по мере необходимости. Эти пользователи просто не думают о «прекращении» работы Android-приложения, равно как и о «прекращении» веб-страницы или «прекращении» термостата.
Пользователи iPhone во многом аналогичны, в том смысле, что нажатие кнопки iPhone не обязательно «чувствует», как приложение было закрыто, так как многие приложения iPhone поднимаются с того места, где пользователь остановился, даже если приложение действительно было закрыто (так как только iPhone позволяет одно стороннее приложение одновременно, в настоящее время).
Как я уже говорил выше, в моем приложении происходит много вещей (данные, передаваемые на устройство, списки с задачами, которые всегда должны быть там, и т. Д.).
Я не знаю, что означает «списки с задачами, которые всегда должны быть там», но «данные, передаваемые на устройство» - это приятная выдумка, которая ни в коем случае не должна выполняться какой-либо деятельностью. Используйте запланированное задание (через AlarmManager
), чтобы обновить ваши данные для максимальной надежности.
Наши пользователи входят в систему и не могут делать это каждый раз, когда им звонят, и Android решает убить приложение.
Есть много приложений для iPhone и Android, которые занимаются этим. Обычно это происходит из-за того, что они держат учетные данные для входа, а не заставляют пользователей каждый раз входить в систему вручную.
Например, мы хотим проверять обновления при выходе из приложения
Это ошибка в любой операционной системе. Насколько вы знаете, причина того, что ваше приложение «закрывается», заключается в том, что ОС закрывается, и тогда ваш процесс обновления завершится ошибкой. Как правило, это не очень хорошая вещь. Либо проверяйте обновления при запуске, либо проверяйте обновления полностью асинхронно (например, с помощью запланированной задачи), но не при выходе.
Некоторые комментарии предполагают, что нажатие кнопки «Назад» не убивает приложение вообще (см. Ссылку в моем вопросе выше).
Нажатие кнопки НАЗАД не «убивает приложение». Он завершает действие, которое было на экране, когда пользователь нажал кнопку НАЗАД.
Он должен завершаться только тогда, когда пользователи хотят прекратить его - никогда иным образом. Если вы не можете писать приложения, которые ведут себя так же, как в Android, то я думаю, что Android нельзя использовать для написания реальных приложений = (
Тогда ни один не может веб-приложений. Или WebOS , если я правильно понимаю их модель (у меня еще не было возможности поиграть с ней). Во всех этих случаях пользователи ничего не «прекращают» - они просто уходят. iPhone немного отличается тем, что в настоящее время он позволяет запускать только одну вещь за раз (за некоторыми исключениями), и поэтому процесс ухода подразумевает довольно немедленное прекращение работы приложения.
Есть ли способ для меня действительно выйти из приложения?
Как и все остальные говорили вам, пользователи (через BACK) или ваш код (через finish()
) могут закрыть вашу текущую деятельность. Пользователям, как правило, больше ничего не нужно для правильно написанных приложений, больше, чем им нужна опция «выход» для использования веб-приложений.
По определению не существует двух одинаковых сред приложений. Это означает, что вы можете видеть тенденции в окружающей среде по мере появления новых и захоронения других.
Например, существует растущее движение, чтобы попытаться исключить понятие «файл». Большинство веб-приложений не заставляют пользователей думать о файлах. Приложения для iPhone обычно не заставляют пользователей думать о файлах. Приложения Android обычно не заставляют пользователей думать о файлах. И так далее.
Аналогичным образом, существует растущее движение, чтобы попытаться устранить понятие «прекращения» приложения. Большинство веб-приложений не заставляют пользователя выходить из системы, а неявно выходят из системы после определенного периода бездействия. То же самое с Android и, в меньшей степени, iPhone (и, возможно, WebOS).
Это требует большего акцента на разработке приложений, сосредоточении на бизнес-целях и отсутствии привязки к модели реализации, привязанной к предыдущей среде приложений. Разработчики, которым не хватает времени или желания сделать это, будут разочарованы новыми средами, которые нарушают их существующую ментальную модель. Это не вина любой из этих сред, равно как и ошибка горы, в которой штормы текут вокруг нее, а не сквозь нее.
Например, в некоторых средах разработки, таких как Hypercard и Smalltalk, приложение и инструменты разработки были объединены в одной установке. Эта концепция не получила широкого распространения за пределами языковых расширений приложений (например, VBA в Excel , Lisp в AutoCAD ). Поэтому разработчики, которые придумали ментальные модели, которые предполагали наличие инструментов разработки в самом приложении, должны были либо изменить свою модель, либо ограничить себя средами, в которых их модель была бы верна.
Итак, когда вы пишете:
Наряду с другими грязными вещами, которые я обнаружил, я думаю, что разработка нашего приложения для Android не произойдет.
Похоже, что это будет к лучшему, для вас, прямо сейчас. Точно так же я бы посоветовал вам не пытаться портировать ваше приложение в Интернет, поскольку некоторые из тех же проблем, о которых вы сообщали в Android, вы найдете и в веб-приложениях (например, без «завершения»). Или, наоборот, когда - нибудь , если вы делаете порт приложение к Интернету, вы можете обнаружить , что поток веб - приложение может быть лучше подходит для Android, и вы можете вернуться к Android порт в то время.