Скачал несколько книжек о программировании для Android, хочется сделать себе одну программку, на маркете ничего похожего не нашел пока (а у жены, на ее Corby такой виджет есть и она его хвалит) – так что читаю, пробую
Одна из книжек пока понравилась больше других, так что не поленюсь и сделаю тут “конспект” – может кому еще пригодится
Автор по шагам описывает, как сделать игру Судоку для андроида (я пытался несколько раз поиграть на iPod-е, ни разу так и не до решал ее до конца.. тупой я что-ли настолько), получается такое себе хорошее howto
Разная там теория мне особо никогда не была нужна, мне нужен был результат, так что про теорию читать еще где-то; в 3-х словах – программы для андроида пишутся на яве, рекомендуется использовать Eclipse со специальным плагином, должен быть установлен андроидный SDK, про все это написано например на android.com; eclipse у меня уже установлен, а скачать/установить SDK недолго и несложно
Вместе с SDK устанавливается эмулятор устройства, так что можно сделать первую программу даже без телефона; если же телефон есть, то у него в настройках включается режим отладки по usb, после чего программа загружается/запускается после компиляции сразу на телефоне
Внутри телефона работает Linux (поэтому умельцам с samdroid.net например можно компилить прошивки с разными версиями ядер и перепрошивать их в телефон); правда линух используется собственно андроидом, юзер и его программы не имеют доступа к системе напрямую (получение root это уже хак)
Выше линуховского ядра находятся библиотеки, написанные для конкретного телефона производителем телефона. Самые важные библиотеки – это:
- Surface Manager – приложение говорит, что оно хочет нарисовать, а как это отобразится на экране – зависит от этого менеджера.. что-то типа DWM в висте
- 2D and 3D graphics – используется для комбинирования 2D и 3D элементов, с использованием аппаратного ускорения, если есть
- Media codecs – используется для кодирования/декодирования видео и аудио, поддерживает AAC, H264, MP3 и т.д.
- SQL database – поддержка базы данных
- Browser engine – использует WebKit для отображения HTML (его – WebKit – используют также хром и сафари на маках и iPhone)
Дальше внутри андроида есть виртуальная машина, оптимизированная для устройств с ограничениями, названная Dalvik; сделал ее сам Google из явы; чем-то она отличается от “обычной” явы, но мне честно говоря до лампочки, чем именно
Все перечисленное используется Application Framework-ом – набором высокоуровневых блоков, которые используют приложения; самые важные части фреймворка - это:
- Activity manager – контроллирует жизненный цикл приложения и обеспечивает “стек” окон/приложений (в андроиде есть прикольная клавиша Back, которая как в броузере перемещает юзера назад – но даже по разным приложениям)
- Content providers – контроллирует данные, которые могут быть расшарены между приложениями (контакты например)
- Resource manager – ресурсы – это все, что не код
- Location manager – сервисы определения местоположения
- Notification manager – сервисы оповещения юзера о входящих сообщениях или запланированных событиях
Ну и то, что видит юзер – это приложения и виджеты; приложение занимает весь экран и самолично занимает все внимание юзера; виджет занимает кусочек экрана и работает “внутри” приложения Home (оно запускается самое первое и содержит ссылки на другие программы)
Когда новый телефон распакован и включен, внутри всегда найдутся: Звонилка, Контакты, Электронная почта, Веб-бровзер, Маркет (через который купятся/скачаются/установятся остальные нужные и ненужные программки). Одна из супер-фич андроида – то, что у него нет “системных” приложений, Звонилка или Home могут быть заменены программой с тем же функционалом без всяких хаков (например первое, что я сделал после очередной перепрошивки и получения “голого” телефона – скачал и установил Launcher Pro)
В какой-то из книжек прочитал, что это даже лучше, если нет опыта программирования “обычного”; ну может и да.. В обычном компе запущена сразу куча программ, на экране куча окон, пока мы работаем с одной программой, другая в это время может что-то делать, все это мигает и копошится..
В андроиде все не так: всегда есть приложение на переднем плане (обычно занимающее весь экран минус строку статуса); сразу после включения это Home (Pandeon у самсунга или Launcher Pro у меня сейчас). Когда запускается новое приложение, оно помещается “поверх всех”, это приложение может запустить следующее или показать свое новое окно – все приложения/окна помещаются андроидом в стек/стопку, еще у него есть кнопка Back, с помощью которой можно перемещаться назад по этой стопке
Это в разы удобнее в сравнении с iPhone-ом, например: я читаю почту, в письме ссылка, я щелкаю ее, смотрю в броузере; в iPhone потом я должен выйти в Home, снова запустить почтовый клиент (который обязательно решит заново проверить почту) и продолжить с почтой. Сейчас же я тыкаю по ссылке, смотрю ее в бровзере, ПОТОМ нажимаю Back и возвращаюсь в ту же точку, где я нажал ссылку.. Лично я это оценил :)
Каждый экран/окно, которое видит пользователь – это экземпляр класса Activity; у приложения один или несколько экранов и один процесс, который их обслуживает. В течении жизни окна/экрана/activity находится в одном из состояний, контроля над которым у программиста нет; он просто уведомляется событием On*** при смене состояний:
Все эти методы могут быть переопределены, андроид вызовет их в нужный момент:
- onCreate(Bundle): вызывается при создании activity; здесь происходит настройка пользовательского интерфейса (параметр, который передается в метод – null или некая информация о состоянии, сохраненная в прошлом при вызове метода onSaveInstanceState
- onStart( ): вызывается, когда экран показывается юзеру
- onResume( ): вызывается, когда экран начинает взаимодействовать с юзером
- onPause( ): вызывается, когда экран уходит на задний план; именно здесь самое место сохранить какие-то данные, с которыми работали..
- onStop( ): когда экран не на виду и не нужен какое-то время, может быть вызван этот метод; но система может решить (например, если мало памяти) и просто убить процесс, onStop при этом не будет вызван
- onRestart( ): метод вызывается, если экран снова показывается юзеру (и до этого он был в состоянии Stopped)
- onDestroy( ): вызывается перед уничтожением активити (но не гарантированно, как и в случае с onStop)
Как видно из этого списка, время жизни активити не гарантированно и последнее, что с ним может случится – это OnPause
Пока все..
Комментариев нет:
Отправить комментарий