Comments 51
P.S — В Android используется Toolbox а не Toybox.
Dianne Hackborn
С такой фамилией у неё, кажется, просто не было выбора. Разве что лесорубом стать :)
Программирую под NDK с самого зарождения этой поделки. Я не знаю кто вам сказал что bionic значительно быстрее, меньше и менее требовательна к памяти чем что либо другое — наврал. Сильно. По моим тестам bionic примерно в 5 раз медленнее. А о совместимости хотя бы с ANSI C и говорить не стоит. Мои впечатления хорошо описывает бывший коллега в начале этого доклада https://academy.realm.io/posts/swift-on-android/.
…
> У приложений Android нет функции main(), нет одной точки входа. Вообще, Android максимально абстрагирует понятие приложение запущено как от пользователя, так и от разработчика. Конечно, процесс приложения нужно запускать и останавливать, но Android делает это автоматически (подробнее я расскажу об этом в следующих статьях). Разработчику предлагается реализовать несколько отдельных компонент, каждая из который обладает своим собственным жизненным циклом.
В результате никогда не знаешь, закрылось приложение, пока ты лазил в словарик, или нет. Невероятно бесит и плохо влияет на продуктивность работы.
Во всяком случае это верно для Mitsubishi. O/D off не просто ограничивает переключение вверх как селектор АКПП, но и меняет алгоритм переключения.
2. Нет, это не означает именно включение, это означает отклонение от некоего дефолтного поведения. Сбойнул датчик и отключилась АБС — загорелась лампа, отключили систему стабилизации — загорелась лампа. То, что люди говорят говорит лишь об их безграмотности, не более того.
3. А она точно нужна — эта индикация?
4. А включение этих режимов и имеет смысл только на спуске для торможения двигателем. Во всяком случае я не могу придумать для чего еще их имеет смысл использовать.
Не происходит никакой дезориентации. Подавляющему большинству режимы кроме D просто не нужны.Если кто-то знает, что точно ему нужно, то изучить логику управления из целого одного рычага и целой одной кнопки — дело 5 минут.
По вашей логике владельцы полноценных внедорожников и вовсе не должны с места трогаться из-за дезориентации — там куда больше рычагов и/или кнопок. Про самолеты с целыми панелями выключателей и индикаторов вовсе молчу.
На вполне полноценных внедорожниках в том числе.
Кстати, абсолютно аналогично обстоит дело с раздаткой, когда выключены обе оси, загорается лампа, когда включена одна из осей лампа тухнет.
Мне подобный подход объясняли авиаторы. Любой загоревшийся транспарант это сигнал отхода от нормальной ситуации.
Я подробнее расскажу об этом в одной из следующих статей (хотя что здесь рассказывать — savedInstanceState
), но идея в том, что вы не должны замечать автоматическое закрытие приложения, потому что оно откроется ровно в том же месте и в таком же состоянии (скролл, введённый текст и т.п.), в котором вы его оставили.
От настоящего переключения это отличается в основном чуть большим временем, которое нужно на переключение (приложению нужно запуститься). Сравните с выгрузкой программы в swap — она делается по тем же причинам (нехватка памяти) и при переключении на выбранную программу точно так же требуется дополнительное время, чтобы восстановить программу в таком же состоянии, как вы её оставили.
Если какое-то приложение работает не так (а, например, открывается на стартовой странице), то это неправильно написанное приложение.
Если какое-то приложение работает не так (а, например, открывается на стартовой странице), то это неправильно написанное приложение.
Не всегда. Есть кейсы, когда возобновлять приложение на прежней стадии не нужно, а важнее отобразить актуальные данные. Вообще этот вопрос из области UX и каждый UX-дизайнер и PO дает на него свой собственный ответ в зависимости от своего случая
Отображать актуальные данные нужно всегда, независимо от перезапуска приложения. Но да, в этом плане Android очень гибок и позволяет настраивать такие параметры, как alwaysRetainTaskState
(по умолчанию состояние через некоторое время сбрасывается...) и clearTaskOnLaunch
, то есть приложение может выбрать оптимальный для своей специфики режим работы.
Но если в результате
Невероятно бесит и плохо влияет на продуктивность работы
то это определённо неправильно сделанное приложение.
ключевой функционал переложили на плечи прикладных программистов, которые, как и следовало ожидать, забили на это болт
О каком функционале вы говорите? То, что я назвал — восстановление activity, введённого текста, состояния переключателей, скролла и т.п. — делается автоматически и по умолчанию Android Framewok'ом. Кроме того, разработчику приложения даётся возможность эффективно сохранить и потом восстановить кастомную информацию.
Я бы не назвал это defective by design, совсем нет.
Иногда к нему приделывают костыли (возможность «закрепить» приложение, запретить его закрывать)...
Если вы про screen pinning, то это вообще не для того. Это фича, которая позволяет запретить переключение между приложениями (для снятия запрета требует пароль/код). Используется, например, чтобы ребёнок делал на вашем устройстве только то, что вы ему разрешили, или в embedded Android (разного сорта банкоматы, терминалы...); к app lifecycle это не имеет никакого отношения.
которые немного улучшают ситуацию, но это полумеры.
Посмотрите новые Android Architecture Components, это далеко не полумеры.
Если вы про screen pinning
Нет, совершенно не про это. Просто встречал как-то прошивку, где вместо списка последних запущенных программ — список програм, находящихся в памяти. И соответственно выбрасывание из списка выгружало программу, а закрепление в списке — не позволяло её выгружать (я не знаю, как бы повёл себя Lowmemorykiller если бы я попытался закрепить слишком много программ). И такая система была на порядок удобнее, чем то, что я встречаю в большинстве прошивок.
На конкурирующей платформе премодерация приложений немного помогает и отфильтровывает откровенный шлак, но и там, увы, вкладка браузера может закрыться с неотправленным комментарием, если вдруг не хватит памяти на входящий звонок.
Думаю, проблему бы решил своп — выгрузка/загрузка памяти приложения целиком, а не сохранение состояния руками программиста.
У меня сейчас второй смарт и второй компьютер обладают равным количеством ОЗУ, так вот, пользоваться компьютером как многозадачным устройством сильно удобнее.
Загруженным из свопа файрфоксом пользоваться решительно невозможно. Проще прибить его процесс и запустить заново с загрузкой всех вкладок, чем дожидаться, пока он вылезает из свопа. Причём он не загружается весь сразу, а как-то кусками. Вроде просвопился, всё работает, потом проскроллишь чуток или в соседнюю вкладку тыкнешь, и можно идти заваривать чай, пока он прочухается.
Но своп на смартфоне действительно помогал, правда я не пользовался им уже лет пять — 1 GB оперативки хватает :)
Очень рекомендую к прочтению последнее издание Танненбаума "Modern Operating Systems" где собственно сама Dianne Hackborn написала главу про Андроид (можно довольно легко найти PDF в гугле). Среди разработчиков Андроида эта глава считается одним из самых лучших (хотя и довольно кратких) введений в архитектуру Android.
например, приложение Google Play Services вообще не имеет собственного графического интерфейса для
пользователя, но предоставляет разработчикам других приложений возможность пользоваться сервисами
Google Play.
Это не совсем верно. Многие интерфейсы которые вы видите в Settings на самом деле реализованы в GmsCore. Например, немалая часть Google Play Protect сделана именно там (оставшая часть интерфейса — в Play Store app).
Согласен, но у GPS нет именно собственного интерфейса, нет MainActivity, пользователь не видит это приложение в лончере (хотя в старых версиях Android оно отображалось как Google Settings, но теперь интегрировано в системные настройки).
Подозреваю, что и отображение Maps сделано внутри Play Services. Не подскажете, где почитать про это (и про то, как реализован интерфейс Play Protect) подробнее?
Если это ожидаемое поведение, есть способы «договориться»? Сервисом оформить или по-другому…
нескольких компонента
нескольких компонентов
Компоне́нта — составляющая чего-либо; термин, используемый в математике и физике; сфера употребления термина компонента у́же, чем слова компонент, и включает в себя только терминологические контексты
Да, ждёт в блокирующем вызове ioctl(binder_fd, BINDER_WRITE_READ, &bwd)
— он работает примерно так же, как write()
и read()
подряд на этом дескрипторе. Вот реализация этого ioctl со стороны ядра.
Да, binder_fd
поддерживает и poll, но обычно процессы блокируют свой основной поток (он же looper thread, он же UI thread в приложениях) на binder_write_read
и делают остальное блокирующее I/O (например, сетевые запросы) в других потоках.
Отличная и очень полезная для общего развития серия статей! Большое спасибо за информацию, все очень подробно и исчерпывающе подобрано и описано. Побольше бы таких интересных материалов!
Как работает Android, часть 1