Пожалуй, никто не будет спорить с тем, что прежде чем начинать писать программы для любой системы, необходимо ознакомиться с ее основными характеристиками, структурой и идеологией. Но писать что-то хочется начать сразу, а разбираться со всем этим надо достаточно долго.
В этой и следующих статьях попробуем вкратце разобраться с тем из чего может состоять программа для Android.
Итак первый элемент приложений в андроиде это класс Activity и его производные. Если отбросить все нюансы, то можно сказать что это окно приложения со всеми элементами управления (кнопками, бегунками, списками). По сути Activity представляет собой пользовательский интерфейс.
Как это дело использовать? Просто создать свой класс-наследник Activity и переопределить несколько методов. Вообще что и ы какой момент происходит с Activity лучше всего понятно из этой диаграммы:
Скачал ее на developer.android.com.
Итак, что же может произойти с нашей activity во время ее жизни и как мы можем контролировать эти процессы? Во-первых наша activity должна создаться. Корректно обработать ее создание нам поможет переопределение метода onCreate().
Следующим шагом после создания будет ее показ пользователю, и если мы хотим например, инициализировать текст в текстовых полях, или запустить фоновую музыку, то можно сделать это здесь. Для этого используется метод onStart(). После метода onStart() вызывается метод onResume().
Если мы с вызовем какое-то диалоговое окно, и наша аctivity перейдет на второй план, мы легко можем обработать такую ситуацию, переопределив метод onPause().
Ну а если мы (или пользователь) вызвали какую-то другую activity, и наша с вами перешла в фоновый режим, то мы переопределяем метод onStop(). Ну например если нам надо остановить фоновую музыку, или сбрость какие-то значения введенные пользователем. Если же пользователь опять решил вернуться к нашей activity то мы обрабатываем это событие с помошью метода onRestart(). При этом, мы не должны забывать, что если системе потребовалась память, то наша активити может быть уничтожена и это мы также можем обработать переопределив метод onDestroy() (К примеру, если мы открыли соединение с каким-то сервером и все время держали его открытым, то в этом методе его не плохо бы и закрыть 🙂 ).
Ну вот, краткий теоретический экскурс закончился, давайте попробуем написать небольшое приложение, которое будет обрабатывать все эти события.
package ru.davidmd.activitytutor; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.Toast; public class activity_example extends Activity { /** Called when the activity is first created. */ LinearLayout lay; Button butt; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); lay = new LinearLayout(this); setContentView(lay); lay.setOrientation(LinearLayout.VERTICAL); butt = new Button(this); butt.setText("CLOSE"); lay.addView(butt); butt.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { ((Activity) v.getContext()).finish(); } }); Toast.makeText(this, "Activity created!", Toast.LENGTH_SHORT).show(); } @Override public void onStart() { super.onStart(); Toast.makeText(this, "Activity Started!", Toast.LENGTH_SHORT).show(); } @Override public void onResume() { super.onResume(); Toast.makeText(this, "Activity resumed!", Toast.LENGTH_SHORT).show(); } @Override public void onPause() { super.onPause(); Toast.makeText(this, "Activity paused!", Toast.LENGTH_SHORT).show(); } @Override public void onStop() { super.onStop(); Toast.makeText(this, "Activity stoped!", Toast.LENGTH_SHORT).show(); } @Override public void onRestart() { super.onRestart(); Toast.makeText(this, "Activity restarted!", Toast.LENGTH_SHORT).show(); } }
С помощью этого приложения вы сможете посмотреть в каком порядке вызываются все эти методы. Обратите внимание, что в каждом методе который мы переопределили, прежде всего мы запускаем такой-же родительский метод! И только псле этого начинаем писать свой код.
Ну вот и все на сегодня. Полный код проекта можно взять здесь activity_tutorial. Пишите, комментируйте 🙂
а если основой приложения является не Активность, а сервис? т.е. гуй и прочие радости являются второстепенными элементами? на пример, в email-клиенте. в идеале он должен незаметно висеть в память и проверять, если почта или нет. и не зависеть от того, отображается ли на экране окно с почтой/настройками и т.д.
Ну и замечательно! Есть ведь класс Servise!
Да нет. Про класс Service я в курсе) Я имел ввиду, что было бы неплохо описать его поведение и жизненный цикл =)
+1
Статьи то класс, но начать бы стоило с настройки рабочей среды и все нюансы работы с ней, так как код после первого урока нам писать все еще не в чем. В принципе как и после последнего.
Тог всех уроков- есть куча кода, но нет среды разработки- печально(((
Также замечание по всем урокам- нет описания создания вашего xml, а в проекте он просто не открывается((
Дык, ставишь эклипс ставишь плагин, ставишь сдк — все ищется в гугле+)
Роман дело говорит, он совершенно прав, а то, что ‘Дык, ставишь эклипс ставишь плагин, ставишь сдк — все ищется в гугле+)’ это не дело, я считаю раз ваша статья знакомит пользователей с программирование на android, то и надо с самого начала, это как блины, здесь указывается как их печь,а на чем и как подготовить тесто — нет
Просто мне кажется что писать стопитсотмиллионную статью на тему как установить Eclipse и скачать плагин не имеет смысла. Тем более что добрый гугл наконец собрал все в одну кучку и теперь все это добро скачивается по одной ссылке и готово к работе сразу после распаковки :))
Урок понравился! Молодец!
А про установку среды — в инете куча уже информации на этот счет.
Если другие статьи будут предельно понятно расписаны, как скажем этот, то, думаю курс молодого бойца удался!
Сам начал пробовать написать приложение для клиентов (работаю у провайдера), которые бы могли смотреть свой баланс и всю свою информацию.
Застопорился пока на GPS, ради хохмы: изначально определяю переменную Location, а в процедуре onlocationchanged пытаюсь этой переменной присвоить все.
Но при получении данных из этой переменной, возникает ошибка, т.е. она равна null. Что не так?
Что лучше использовать json или xml? Нашел информацию, что обработчик xml уже есть встроенный?
Статья очень хорошая, добавляет понимания для начинающих, содержание соответствует названию. Четко, лаконично. Проект работает. Спасибо!
А если сразу на мобиле писать, есть шанс что либо скомпилировать, к примеру простенький плейер?
На мобиле писать не получится…
AIDE https://play.google.com/store/apps/details?id=com.aide.ui
С простым кодом проблем нет. Местами поудобнее Eclipse. Эмулятор не нужен, проекты совместимы с Eclipse
На мобиле можно работать, есть приложение, к сожалению с графикой не позволяет работать
На самой мобиле компилить кажется нельзя… Или это на iOS?
AIDE представляет собой интегрированную среду разработки (IDE) настоящих Приложений для Андроида прямо на устройствах с ОС Андроид. В AIDE реализован полный цикл разработки редактирование-компиляция-выполнение: для написания кода имеется редактор, обладающий богатым набором возможностей, среди которых автодополнение кода, проверка ошибок в реальном времени, рефакторинг, «умная» навигация по коду и запуск вашего Приложения в одно касание.
я попробовал, прикольно, мелковато только на телефоне.
Я раньше очень давно программировал на al fort и всяких скадах и т.д. так захотелось что то изменить под андроид на своём планшете. Что посоветуете прочитать и …? Начать делать. Мозги пока работают.
протестил эту хрень в АИДЕ на мтс-972 … усё работает … компилируецо за 5-10 сек ..
конспектирую …
было бы неплохо , если по больше бы писали про апи … про кустарный способ задания графических элементоф …
А что именно имеется в виду? Про что писать-то?
Статья нужная. Читать после написания «Hello world». Главное выбран правильный формат изложения и информационное поле не так сильно «затоптано» как для «Hello world».
Спасибо за статью!
Всегда пожалуйста!!!
Может про установку Eclipse и не стоит писать,но например как добавить ваш проект было бы неплохо.У меня при добавлении пишет что invalid project description.делаю так,копирую на ворк спейс вашу папку,потом в эклипс в поле проектов правую кнопку мыши импорт
разобрался,не нужно было копировать
Да, иначе он пытается перезаписать в ту же папку из которой копирует…
В общем загрузил проект без ошибок,кроме как вот такой Unable to resolve target ‘Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8’.И еще текст каракулями почему то,а где кодировку поменять не подскажите?)
поменял на utf-8 вроде нормально,в project-properties-справа
Хм, просто у меня был установлен SDK для первого Galaxy Tab 🙂 Просто поменяйте 🙂
под Андроид Студио напиши. Эклипс хорошо, но IDE не для всех
На Андроид Студии не идёт