Структура приложения под Android Часть 1 (Activity)

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

В этой и следующих статьях попробуем вкратце разобраться с тем из чего может состоять программа для 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. Пишите, комментируйте 🙂

Вам понравилось? Было полезно? Поделитесь!

Опубликовать в Facebook
Опубликовать в Google Buzz
Опубликовать в Google Plus
Опубликовать в LiveJournal
Опубликовать в Мой Мир
Опубликовать в Одноклассники
Опубликовать в Яндекс
Запись опубликована в рубрике Android, Новичку, Программирование с метками , , , , . Добавьте в закладки постоянную ссылку.

30 комментариев на «Структура приложения под Android Часть 1 (Activity)»

  1. 13-oz говорит:

    а если основой приложения является не Активность, а сервис? т.е. гуй и прочие радости являются второстепенными элементами? на пример, в email-клиенте. в идеале он должен незаметно висеть в память и проверять, если почта или нет. и не зависеть от того, отображается ли на экране окно с почтой/настройками и т.д.

  2. Роман говорит:

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

    • eka говорит:

      Дык, ставишь эклипс ставишь плагин, ставишь сдк — все ищется в гугле+)

    • windows 7 говорит:

      Роман дело говорит, он совершенно прав, а то, что ‘Дык, ставишь эклипс ставишь плагин, ставишь сдк — все ищется в гугле+)’ это не дело, я считаю раз ваша статья знакомит пользователей с программирование на android, то и надо с самого начала, это как блины, здесь указывается как их печь,а на чем и как подготовить тесто — нет

      • davidmd говорит:

        Просто мне кажется что писать стопитсотмиллионную статью на тему как установить Eclipse и скачать плагин не имеет смысла. Тем более что добрый гугл наконец собрал все в одну кучку и теперь все это добро скачивается по одной ссылке и готово к работе сразу после распаковки :))

  3. Дмитрий говорит:

    Урок понравился! Молодец!
    А про установку среды — в инете куча уже информации на этот счет.
    Если другие статьи будут предельно понятно расписаны, как скажем этот, то, думаю курс молодого бойца удался!
    Сам начал пробовать написать приложение для клиентов (работаю у провайдера), которые бы могли смотреть свой баланс и всю свою информацию.
    Застопорился пока на GPS, ради хохмы: изначально определяю переменную Location, а в процедуре onlocationchanged пытаюсь этой переменной присвоить все.
    Но при получении данных из этой переменной, возникает ошибка, т.е. она равна null. Что не так?
    Что лучше использовать json или xml? Нашел информацию, что обработчик xml уже есть встроенный?

  4. Юрий говорит:

    Статья очень хорошая, добавляет понимания для начинающих, содержание соответствует названию. Четко, лаконично. Проект работает. Спасибо!

  5. gogi говорит:

    А если сразу на мобиле писать, есть шанс что либо скомпилировать, к примеру простенький плейер?

  6. Кос говорит:

    На мобиле можно работать, есть приложение, к сожалению с графикой не позволяет работать

    • davidmd говорит:

      На самой мобиле компилить кажется нельзя… Или это на iOS?

      • AlexXXL говорит:

        AIDE представляет собой интегрированную среду разработки (IDE) настоящих Приложений для Андроида прямо на устройствах с ОС Андроид. В AIDE реализован полный цикл разработки редактирование-компиляция-выполнение: для написания кода имеется редактор, обладающий богатым набором возможностей, среди которых автодополнение кода, проверка ошибок в реальном времени, рефакторинг, «умная» навигация по коду и запуск вашего Приложения в одно касание.

        я попробовал, прикольно, мелковато только на телефоне.

  7. vladimir говорит:

    Я раньше очень давно программировал на al fort и всяких скадах и т.д. так захотелось что то изменить под андроид на своём планшете. Что посоветуете прочитать и …? Начать делать. Мозги пока работают.

  8. dimon говорит:

    протестил эту хрень в АИДЕ на мтс-972 … усё работает … компилируецо за 5-10 сек ..
    конспектирую …
    было бы неплохо , если по больше бы писали про апи … про кустарный способ задания графических элементоф …

  9. Юрий говорит:

    Статья нужная. Читать после написания «Hello world». Главное выбран правильный формат изложения и информационное поле не так сильно «затоптано» как для «Hello world».

  10. Илья говорит:

    Спасибо за статью!

  11. Серг говорит:

    Может про установку Eclipse и не стоит писать,но например как добавить ваш проект было бы неплохо.У меня при добавлении пишет что invalid project description.делаю так,копирую на ворк спейс вашу папку,потом в эклипс в поле проектов правую кнопку мыши импорт

  12. Серг говорит:

    В общем загрузил проект без ошибок,кроме как вот такой Unable to resolve target ‘Samsung Electronics Co., Ltd.:GALAXY Tab Addon:8’.И еще текст каракулями почему то,а где кодировку поменять не подскажите?)

  13. OmenRa говорит:

    под Андроид Студио напиши. Эклипс хорошо, но IDE не для всех

  14. Павел говорит:

    На Андроид Студии не идёт

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *