Це врешті-решт дістанеться до вашого питання, але спершу я хочу звернутися до ряду питань, які ви ставите у своїх коментарях до різних відповідей, вже даних під час написання цього повідомлення. Я не маю наміру змінювати свою думку - скоріше, це тут для інших, хто прийде прочитати цю публікацію в майбутньому.
Справа в тому, що я не можу дозволити Android визначити, коли моє додаток буде закрито. це повинен бути вибір користувача.
Мільйони людей цілком задоволені моделлю, де навколишнє середовище закриває додаток у міру необхідності. Ці користувачі просто не замислюються про те, щоб "закрити" додаток для Android, більше, ніж думають про "припинення" веб-сторінки або "припинення" термостата.
Користувачі iPhone майже однаково, тому що натискання кнопки iPhone не обов'язково "відчуває", як додаток було припинено, оскільки багато додатків iPhone піднімаються там, де користувач припинився, навіть якщо додаток справді було вимкнено (оскільки лише iPhone дозволяє одночасно додавати сторонні додатки).
Як я вже говорив вище, у моєму додатку відбувається багато речей (дані, які PUSHed на пристрій, списки із завданнями, які завжди повинні бути там тощо).
Я не знаю, що означає "списки із завданнями, які завжди повинні бути там", але "дані, які передаються на пристрій", є приємною вигадкою, і це не повинно робитись діяльністю ні в якому разі. Використовуйте заплановане завдання (через 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 порт в той час.