Не одобряется ли выход из приложения?

Пожалуйста, посмотрите пример кода ниже:

function readURL(input) {

  if (input.files && input.files[0]) {
    var reader = new FileReader();

    reader.onload = function(e) {
      $('#blah').attr('src', e.target.result);
    }

    reader.readAsDataURL(input.files[0]);
  }
}

$("#imgInp").change(function() {
  readURL(this);
});

your image

Кроме того, вы можете попробовать этот образец здесь .

1113
задан 7 revs, 6 users 67% 21 January 2017 в 21:15
поделиться

16 ответов

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

На уровне машины разница между int и char равна только размеру или количеству байтов памяти, выделенной для нее языком программирования. В C, IIRC, символ равен одному байту, в то время как int равен 4 байтам. Если бы вы «посмотрели» на них внутри самой машины, вы бы увидели последовательность битов для каждого. Способность рассматривать их как int или char зависит от того, как язык решит интерпретировать их (именно поэтому его можно конвертировать туда и обратно между двумя типами).

При использовании getchar () мне сказали, что лучше использовать тип «int», чем тип «char» в связи с тем, что «int» может содержать больше значений, в то время как «char» может содержит только 256 значений.

Это происходит потому, что есть 2 ^ 8, или 256 комбинации битов 8 (потому что бит может иметь два возможных значения), тогда как есть 2 ^ 32 комбинации битов 32. Константа EOF (как определено С) представляет собой отрицательное значение, не попадающее в диапазон от 0 до 255. При попытке присвоить это отрицательное значение символу (при этом 4 байта сжимаются в 1) биты более высокого порядка будут потеряны, и в итоге будет получено допустимое значение символа, НЕ совпадающее с EOF. Вот почему нужно хранить его в int и проверять перед отливкой в char.

Также означает ли это, что данные тип «char» подходит только в том случае, если мы просто присваиваем значение переменная вручную, например 0char c = «а», когда мы точно знаем, что будет иметь только 256 возможных ASCII Символы?

Да, тем более что в этом случае вы назначаете литерал символа.

Кроме того, что на самом деле важно разница между «char» и «int»? Если мы можем использовать тип «int» вместо тип «char», почему мы решаем использовать один над другим в определенное время?

Самое главное, вы выбираете int или char на уровне языка в зависимости от того, хотите ли вы рассматривать переменную как число или букву (чтобы переключиться, вам нужно будет привести к другому типу). Если вы хотите целочисленное значение, которое занимает меньше места, вы можете использовать короткий int (который я считаю 2 байт), или если вы ДЕЙСТВИТЕЛЬНО обеспокоены использованием памяти вы можете использовать char , хотя в основном это не обязательно.

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

-121--2921089-

Отличные вопросы. K & R был написан в те времена, когда было гораздо меньше знать о компьютерах, и поэтому программисты знали гораздо больше об оборудовании. Каждый программист должен быть знаком с этим делом, но (понятно)многие начинающие программисты - нет.

В Университете Карнеги-Меллон они разработали целый курс, чтобы заполнить этот пробел в знаниях, для которого я был TA. Я рекомендую учебник для этого класса: «Компьютерные системы: перспектива программиста» http://amzn.com/013034074X/

Ответы на ваши вопросы длиннее, чем могут быть рассмотрены здесь, но я дам вам несколько кратких указаний для вашего собственного исследования.

В основном, компьютеры хранят всю информацию - будь то в памяти (ОЗУ) или на диске - в двоичном формате, системе чисел base-2 (в отличие от десятичной, которая является базовой 10). Одна двоичная цифра называется битом. Компьютеры, как правило, работают с памятью в 8-битных фрагментах, называемых байтами.

Символ в C - это один байт. Значение int обычно равно четырем байтам (хотя оно может быть различным на разных машинах). Таким образом, символ может содержать только 256 возможные значения, 2 ^ 8. int может содержать 2 ^ 32 различных значений.

Для получения дополнительной информации обязательно прочитайте книгу или прочитайте несколько страниц Википедии:

Best of luck!

UPDATE с информацией о модульной арифметике по запросу:

Во-первых, прочитайте о модульной арифметике: http://en.wikipedia.org/wiki/Modular_arithmetic

В основном, в двухразрядной системе дополнения n-разрядное число действительно представляет класс эквивалентности целых чисел по модулю 2 ^ n.

Если кажется, что это усложняет его, а не меньше, то ключевые вещи, которые нужно знать, просто:

  • Беззнаковое n-разрядное число содержит значения от 0 до 2 ^ n-1. Значения «обернуться», так что, например, когда вы сложите два числа и получите 2 ^ n, вы действительно получите ноль. (Это называется «переполнением».)
  • Число со знаком n-бит содержит значения от -2 ^ (n-1) до 2 ^ (n-1) -1. Числа по-прежнему оборачиваются, но наибольшее число оборачивается до самого отрицательного, и оттуда начинается отсчет в сторону нуля.

Таким образом, для 255 можно 0 беззнаковый байт (8-битовое число). 255 + 1 оборачивается к 0. 255 + 2 заканчивается как 1 и так далее. Байт со знаком может быть от -128 до 127. 127 + 1 заканчивается как -128. (!) 127 + 2 заканчивается как -127 и т.д.

-121--2921088-

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

Суть в том, что я не могу допустить Android, чтобы определить, когда мое приложение будет прекращено. это должно быть выбор пользователя.

Миллионы людей вполне довольны моделью, в которой среда закрывает приложение по мере необходимости. Эти пользователи просто не думают о «прекращении» приложения Android, не больше, чем о «прекращении» веб-страницы или «прекращении» термостата.

Пользователи iPhone во многом одинаковы, так как нажатие кнопки iPhone не обязательно «чувствует», что приложение было прервано,так как многие приложения iPhone занимают место, где пользователь остановился, даже если приложение действительно было закрыто (так как iPhone разрешает только одно приложение стороннего производителя за раз, в настоящее время).

Как я сказал выше, существует много вещи, происходящие в моем приложении (данные быть PUSHED to the device, перечислять с заданиями это всегда должно быть там и т.д.).

Я не знаю, что означает «списки с задачами, которые всегда должны быть», но «данные, которые PUSHED к устройству» является приятной выдумкой и не должны быть сделаны деятельностью в любом случае. Используйте запланированную задачу (через AlarmManager ) для обновления данных для обеспечения максимальной надежности.

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

Есть много приложений для iPhone и Android, которые имеют дело с этим. Обычно это происходит потому, что они удерживают полномочия для входа, а не заставляют пользователей входить в систему каждый раз вручную.

Например, мы хотим проверить обновления при выходе из приложения

Это ошибка в любой операционной системе. Насколько вам известно, причина «выхода» вашего приложения в том, что ОС завершает работу, и процесс обновления завершится с ошибкой в середине потока. Вообще, это нехорошо. Либо проверять обновления при запуске, либо проверять обновления полностью асинхронно (например, через запланированную задачу), никогда не выходя.

Некоторые комментарии предполагают, что попадание кнопка «Назад» не убивает приложение в все (см. ссылку в моем вопросе выше).

Нажатие кнопки BACK не «убивает приложение». Она завершает действие, которое было на экране, когда пользователь нажал кнопку BACK.

Он должен завершаться только тогда, когда пользователи хотят прервать его - никогда любой другой способ. Если вы не можете писать приложения, которые ведут себя так в Android, тогда я думаю, что Android нельзя использовать для записи реальных приложений = (

Тогда веб-приложения не могут. Или WebOS , если я правильно понимаю их модель (у меня еще не было возможности поиграть с ней). Во всех этих случаях пользователи ничего не «прекращают» - они просто уходят. iPhone немного отличается тем, что в настоящее время позволяет запускать только одну вещь за один раз (за несколькими исключениями), и поэтому акт ухода подразумевает довольно немедленное прекращение работы приложения.

Есть ли для меня способ действительно бросить Приложение?

Как вам сказали все остальные, пользователи (через BACK) или ваш код (через finish () ) могут закрыть текущее действие. Пользователям, как правило, больше ничего не нужно, для правильно написанных приложений, кроме как для использования веб-приложений.


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

Например, растет движение за исключение понятия «файл». Большинство веб- прикладной не заставляют пользователей думать о файлах. Приложения iPhone обычно не заставляют пользователей думать о файлах.Приложения Android обычно не заставляют пользователей думать о файлах. И так далее.

Аналогичным образом, наблюдается растущее движение в попытке исключить понятие «завершения» приложения. Большинство веб-приложений не вынуждают пользователя выйти из системы, а скорее неявно выключают пользователя после периода бездействия. То же самое с Android, и в меньшей степени, iPhone (и, возможно, WebOS).

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

Например, в некоторых средах разработки, таких как Hypercard и Smalltalk, приложение и средства разработки были объединены в одну установку. За пределами языковых расширений приложений (например, VBA в Excel , Lisp в AutoCAD ) эта концепция не охватывала много. Разработчики, которые придумали ментальные модели, предполагавшие существование инструментов разработки в самом приложении, поэтому либо должны были изменить свою модель, либо ограничиться средами, где их модель сохраняла бы свою истинность.

Итак, когда вы пишете:

Наряду с другими грязными вещами я открыл, я думаю, что развиваясь наше приложение для Android не собирается случается.

Это, казалось бы, было бы для лучшего, для вас, для прямо сейчас. Аналогичным образом, я бы посоветовал вам не пытаться перенести ваше приложение в Интернет, так как некоторые из тех же проблем, о которых вы сообщили с Android, вы также найдете в веб- прикладной (например, без «прекращения»). Или, наоборот, когда-нибудь, если вы перенесете ваше приложение в Интернет, вы можете обнаружить, что поток веб-приложения может быть лучше соответствует Android, и вы можете вернуться к порту Android в это время.

1271
ответ дан 19 December 2019 в 20:15
поделиться

Вы можете просмотреть следующие статьи, в которых описаны несколько примеров:

-121--2340308-

HTML5 вводит понятие пользовательских атрибутов данных , которые любой может создать для присоединения пользовательских скрытых данных к элементам в целях создания сценариев. Просто создайте атрибут, используя префикс data- , например data-myattr1 или data-myattr2 , и заполните его своими данными.

<div data-myattr1="myvalue1" data-myattr2="myvalue2">Content</div>

Приятно, что это решение уже работает во всех основных браузерах; все они будут анализировать неизвестные атрибуты и предоставлять их в DOM для доступа по JavaScript. HTML5 добавляет несколько удобных механизмов доступа к ним, которые еще не реализованы, но для доступа к ним на данный момент можно просто использовать стандартный getAttribute . И тот факт, что они разрешены в HTML5, означает, что ваш код будет подтвержден, если вы готовы использовать проект стандарта в отличие от принятого (я не верю, что атрибуты data- являются особенно спорными, однако, поэтому я был бы удивлен, если бы они были удалены из стандарта).

Преимущество, которое это имеет по сравнению с атрибутами пространства имен в XHTML, заключается в том, что IE не поддерживает XHTML, поэтому вам придется реализовать что-то, что претендует на использование атрибутов пространства имен, но на самом деле просто использует недопустимые атрибуты с : в их имени, то есть как IE будет анализировать их. Это лучше, чем использование class , потому что вложение большого количества данных в атрибут class перегружает его довольно много и требует дополнительного анализа, чтобы извлечь различные части данных. И это лучше, чем просто создать свой собственный (который будет работать в текущих браузерах), потому что хорошо определено, что эти атрибуты с префиксом data- являются личными фрагментами данных для сценариев, и поэтому ваш код будет проверяться в HTML5 и никогда не будет конфликтовать с будущими стандартами.

Другой малоизвестный метод добавления пользовательских данных в HTML, который действителен даже в HTML- 4, это добавление элементов script с атрибутами type чего-либо, кроме text/javascript (или одного из пары других типов, которые можно использовать для указания JavaScript). Эти блоки скриптов будут игнорироваться браузерами, которые не знают, что с ними делать, и вы можете получить к ним доступ через DOM и делать с ними то, что хотите. HTML5 явно обсуждает это использование , но нет ничего, что делает его недействительным в старых версиях, и он работает во всех современных браузерах, насколько я знаю. Например, если вы хотите использовать CSV для определения таблицы данных:

<div>
  <script type="text/csv;header=present">
    id,myattr1,myattr2
    something,1,2
    another,2,4
  </script>
  Content
</div>

Это метод, используемый SVG Web для внедрения SVG в HTML,с эмуляцией через Flash, если браузер не поддерживает собственный SVG. В настоящее время даже браузеры, которые поддерживают SVG (Firefox, Safari, Chrome, Opera), не поддерживают его непосредственно в формате HTML, они поддерживают его только непосредственно в формате XHTML (поскольку элементы SVG находятся в другом пространстве имен). SVG Web позволяет поместить SVG inline в HTML, используя тэг сценария, и затем он преобразует эти элементы в соответствующее пространство имен и добавляет их в DOM, чтобы они могли быть визуализированы как XHTML. В браузерах, которые не поддерживают SVG, он также эмулирует функцию элементов с помощью Flash.

-121--1480085-

Вы можете выйти, нажав кнопку Back или вызвав finish () в Activity . Просто вызовите finish () из элемента меню , если вы хотите явно его отключить.

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

37
ответ дан 19 December 2019 в 20:15
поделиться

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

System.exit () не убивает ваше приложение, если у вас есть более одного действия на куча. На самом деле происходит то, что процесс завершается и немедленно перезапускается с на одно действие в стеке меньше. То же самое происходит, когда ваше приложение завершается диалоговым окном «Принудительное закрытие» или даже когда вы пытаетесь убить процесс из DDMS. Насколько мне известно, это совершенно недокументированный факт.

Короткий ответ: если вы хотите выйти из приложения, вы должны отслеживать все действия в своем стеке и finish () ВСЕ их, когда пользователь хочет выйти (и нет, нет возможности перебирать стек Activity, поэтому вам придется управлять всем этим самостоятельно). Даже это на самом деле не убивает процесс или какие-либо висячие ссылки, которые могут у вас быть. Он просто завершает свою деятельность. Кроме того, я не уверен, работает ли Process.killProcess (Process.myPid ()) лучше; Я не тестировал.

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

Длинный ответ включает объяснение философии такого поведения.Философия основана на ряде предположений:

  1. Во-первых, это происходит только тогда, когда ваше приложение находится на переднем плане. Если он находится в фоновом режиме, процесс завершится нормально. Однако, если он находится на переднем плане, ОС предполагает, что пользователь хочет продолжать делать то, что он / она делал. (Если вы пытаетесь убить процесс из DDMS, вы должны сначала нажать кнопку «Домой», а затем убить его)
  2. Также предполагается, что каждое действие не зависит от всех других действий. Часто это верно, например, в случае, если ваше приложение запускает действие браузера, которое является совершенно отдельным и написано не вами. Действие браузера может быть создано или не создано для одной и той же Задачи, в зависимости от его атрибутов манифеста.
  3. Предполагается, что каждое из ваших действий полностью автономно и может быть прекращено / восстановлено в мгновение ока. (Мне не нравится это конкретное предположение, поскольку в моем приложении много действий, которые полагаются на большой объем кэшированных данных, слишком большой для эффективной сериализации во время onSaveInstanceState , но что делать?) Для большинства хорошо написанных Для приложений Android это должно быть правдой, поскольку вы никогда не знаете, когда ваше приложение будет отключено в фоновом режиме.
  4. Последний фактор - это не столько предположение, сколько ограничение ОС: явное уничтожение приложения - это то же самое, что и сбой приложения, а также то же самое, что Android, убивающий приложение для освобождения памяти. Это завершается нашим удачным ходом: поскольку Android не может определить, завершилось ли приложение, завершилось ли оно сбой или было остановлено в фоновом режиме, предполагается, что пользователь хочет вернуться с того места, где он остановился, и ActivityManager перезапускает процесс.

Если подумать, это подходит для платформы. Во-первых, это именно то, что происходит, когда процесс завершается в фоновом режиме, а пользователь возвращается к нему, поэтому его необходимо перезапустить с того места, где он остановился. Во-вторых, это то, что происходит, когда приложение вылетает и представляет ужасное диалоговое окно «Принудительное закрытие».

Допустим, я хочу, чтобы мои пользователи могли сделать снимок и загрузить его. Я запускаю действие камеры из своего действия и прошу вернуть изображение. Камера помещается в верхнюю часть моей текущей задачи (а не создается в отдельной задаче). Если в камере произошла ошибка и произошел сбой, должно ли это привести к сбою всего приложения? С точки зрения пользователя, отказала только Камера, и они должны быть возвращены к своей предыдущей активности. Таким образом, он просто перезапускает процесс со всеми теми же действиями в стеке, за исключением камеры. Поскольку ваши действия должны быть спроектированы таким образом, чтобы их можно было убить и восстановить в мгновение ока, это не должно быть проблемой. К сожалению, не все приложения могут быть разработаны таким образом, поэтому это проблема для многих из нас, независимо от того, что вам скажет Ромен Гай или кто-либо другой. Итак, нам нужно использовать обходные пути.

Итак, мой заключительный совет:

  • Не пытайтесь убить процесс. Либо вызовите finish () для всех действий, либо вызовите moveTaskToBack (true) .
  • Если ваш процесс выйдет из строя или будет остановлен, и если вам, как и мне, понадобятся данные, которые были в памяти, которые теперь потеряны, вам нужно будет вернуться к корневому действию. Для этого вы должны вызвать startActivity () с намерением, содержащим флаг Intent.FLAG_ACTIVITY_CLEAR_TOP .
  • Если вы хотите убить свое приложение с точки зрения Eclipse DDMS,ему лучше не быть на переднем плане, иначе он перезапустится. Вы должны сначала нажать кнопку «Домой», а затем , затем завершить процесс.
289
ответ дан 19 December 2019 в 20:15
поделиться

Все мои приложения имеют кнопки выхода... и я довольно часто получаю положительные комментарии от пользователей из-за этого. Меня не волнует, что платформа была разработана таким образом, что приложениям они не нужны. Говорить "не ставьте их там" просто смешно. Если пользователь хочет уйти... Я предоставляю им доступ, чтобы сделать именно это. Я не думаю, что это снижает эффективность работы Android и кажется хорошей практикой. Я понимаю жизненный цикл... и по моим наблюдениям, Android не очень хорошо справляется с обработкой it...., и это основной факт.

178
ответ дан 19 December 2019 в 20:15
поделиться

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

Незнание того, что «делает» ваше загадочное приложение, на самом деле не важно. Предположим, он туннелируется в какую-то сверхзащищенную корпоративную интрасеть, выполняет некоторый мониторинг или взаимодействие и остается в системе до тех пор, пока пользователь «не выйдет из приложения». Поскольку им управляет ваш ИТ-отдел, пользователи должны четко осознавать, находятся ли они в интрасети или вне ее. Следовательно, вы считаете важным, чтобы пользователи «бросили курить».

Это просто. Сделайте сервис, который помещает текущее уведомление в панель уведомлений, говоря: «Я в интрасети, или я бегу». Эта служба должна выполнять все функции, необходимые для вашего приложения. Имейте действия, которые связаны с этой службой, чтобы позволить вашим пользователям получать доступ к частям пользовательского интерфейса, которые им необходимы для взаимодействия с вашим «приложением». И у вас есть кнопка Android Menu -> Quit (или выход из системы, или что-то еще), которая сообщает службе о выходе, а затем закрывает само действие.

Это, по сути, именно то, что вы говорите, что хотите. Сделано по-Android. Посмотрите в Google Talk или Google Maps Navigation примеры этого «выхода» из возможного менталитета. Единственное отличие состоит в том, что нажатие кнопки возврата из вашей активности может оставить ваш UNIX-процесс в ожидании на тот случай, если пользователь захочет оживить ваше приложение. На самом деле это ничем не отличается от современной операционной системы, которая кэширует недавно использованные файлы в памяти. После выхода из программы Windows, скорее всего, ресурсы, которые ей нужны, все еще находятся в памяти, ожидая замены другими ресурсами, поскольку они загружаются сейчас, когда они больше не нужны. Android - то же самое.

Я действительно не вижу вашей проблемы.

143
ответ дан 19 December 2019 в 20:15
поделиться

Тед, что вы пытаетесь сделать, можно сделать, возможно, просто не то, как вы думаете об этом прямо сейчас.

Я предлагаю вам прочитать деятельность и услуги. Остановитесь, используя термин «приложение» и начните ссылаться на компоненты, то есть активность, сервис. Я думаю, вам просто нужно узнать больше о платформе Android; Это изменение в мышлении из стандартного приложения ПК. Тот факт, что ни один из ваших постов не имел слова «Деятельность» (не хватает цитаты FAQ, то есть не ваших слов) в них говорит мне, что вам нужно прочитать больше.

29
ответ дан 19 December 2019 в 20:15
поделиться

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

11
ответ дан 19 December 2019 в 20:15
поделиться

В любом случае, если вы хотите завершить ваше приложение, вы всегда можете звонить System.exit (0); .

4
ответ дан 19 December 2019 в 20:15
поделиться

Я рассмотрел бы чтение "Разработка Приложения беспроводной связи Android" опубликованный Addison-Wesley. Я просто заканчиваю его, и это ОЧЕНЬ полно.

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

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

Между прочим, я не путь, связанный с Addison-Wesley или любым человеком или организацией, связанной с этой книгой. После перечитывания моего сообщения я чувствую, что оторвался немного fanboyish. Я просто действительно, действительно наслаждался им и нашел его чрезвычайно полезным. :)

18
ответ дан 19 December 2019 в 20:15
поделиться

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

Например, Google Silence продолжает воспроизводить подкаст, когда приложение не видно. Но всегда есть кнопка Паузы, чтобы выключить подкаст, когда пользователь с ним выполнен. Если я помню правильно, слушай, даже помещает ярлык в строке уведомлений, чтобы вы всегда могли быстро добраться до кнопки паузы. Другим примером является приложение, как приложение Twitter, например, постоянно выбирает службу в Интернете. Эти типы приложений действительно должны разрешить пользователю выбирать, как часто опросить сервер, или даже опросить в фоновом потоке.

Если вам необходимо иметь код, который работает на выходе, вы можете переопределить OnPause (), Onstop (), либо ondestroy () в зависимости от необходимого. http://developer.android.com/reference/android/app/activity.html#activityLifecyclecle

19
ответ дан 19 December 2019 в 20:15
поделиться

Хмммм ...

Я думаю, что вы просто неправильно видите приложение для Android. Вы можете легко сделать что-то почти подобное тому, что хотите:

  • Сохраняйте / восстанавливайте состояние действий приложения, как это рекомендуется в документации по жизненному циклу разработчика.

  • Если на этапе восстановления требуется вход в систему (информация о входе в систему / сеанс недоступна), сделайте это.

  • В конце концов добавьте кнопку / меню / тайм-аут, и в этом случае вы выполните finish () без сохранения логина и другой информации о сеансе, что неявно завершит сеанс приложения: если приложение запущено / снова выведен на передний план, он начнет новую сессию.

Таким образом, вам все равно, действительно ли приложение удалено из памяти или нет.

Если вы действительно хотите удалить его из памяти (это не рекомендуется, и, кстати, с какой целью?), Вы можете условно убить его в конце onDestroy () с помощью java.lang. System.exit (0) (или, возможно, restartPackage (..) ?). Конечно, делайте это только в том случае, если вы хотите «действительно завершить приложение», потому что onDestroy () является частью обычного жизненного цикла действий, а не завершением приложения вообще.

12
ответ дан 19 December 2019 в 20:15
поделиться

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

  1. Пользователь может захотеть иметь некоторый контроль над тем, какое приложение будет уничтожено в случае нехватки памяти. случае нехватки памяти. Если важное приложение A работает в фоновом режиме, то вы можете захотеть выйти из приложения B, когда закончите работу с ним, чтобы чтобы приложение A не было убито операционной системой.

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

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

10
ответ дан 19 December 2019 в 20:15
поделиться

Я надеюсь, что со временем все изменится. Пользователь должен иметь возможность убить приложение или процесс, если процесс приложения правильно изолирован ОС. Существует мнение, что приложения должны быть написаны безупречно, иначе пользователь будет использовать только те приложения, которые соответствуют всем рекомендациям SDK. Я думаю, что это сложная задача.

9
ответ дан 19 December 2019 в 20:15
поделиться

Если вы не можете понять, как сделать ваши данные/соединения (и тем самым ваше "приложение") постоянными, то вы не сможете делать то, что вам "нужно" делать с Android.

Те, кто загружает эти милые маленькие App Killers, обычно обнаруживают, что они не помогают продлить срок службы батареи или увеличить использование памяти, но мешают ОС выполнять свою работу по эффективному управлению памятью...

http://android-developers.blogspot.com/2010/04/multitasking-android-way.html

19
ответ дан 19 December 2019 в 20:15
поделиться

Без функции выхода для разработчика приложения, чтобы убить свое собственное приложение, это очень плохой дизайн.

Мое приложение должно позволять пользователю динамически изменять данные во время выполнения, и пользователю необходимо перезапустить мое приложение, чтобы изменения вступили в силу, но Android не разрешил перезапуск моего приложения сам по себе. У ОС Android очень плохой жизненный цикл дизайнерских приложений.

7
ответ дан 19 December 2019 в 20:15
поделиться

Вы, вероятно, провели много лет, пишущий "надлежащие" программы для "надлежащих" компьютеров. Вы говорите, что Вы изучение к программе в Android. Это - только одна из вещей, которые необходимо изучить. Вы не можете проведенные годы, делая рисование акварели и предполагать, что живопись работает точно тот же путь. Это было самым наименьшим количеством вещей, которые были новыми понятиями мне, когда я записал свое первое приложение восемь лет назад.

0
ответ дан 19 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

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