Главная страница

моб разраб. Лабораторные работы с 1 по 21. Лабораторная работа Использование значений строк и цветов


Скачать 5.49 Mb.
НазваниеЛабораторная работа Использование значений строк и цветов
Анкормоб разраб
Дата05.03.2022
Размер5.49 Mb.
Формат файлаdocx
Имя файлаЛабораторные работы с 1 по 21.docx
ТипЛабораторная работа
#383909
страница5 из 20
1   2   3   4   5   6   7   8   9   ...   20

Создание первого приложения под Android


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

«Мастер создания нового проекта»:
Выбираем «Android Project»



Вводим имя проекта


Выбираем целевую платформу
Вводим имя пакета (1) и имя класса Активности(2), который будет для нас автоматически создан мастером:

Созданный проект сразу пока мы не внесли в него несовместимы с жизнью изменения является работоспособный приложением, так что мы его можем запустить:


Даем понять Eclipse, как именно мы хотим запустить на выполнение наш проект:




И наслаждаемся результатом:


Активности (Activity) в Android


При создании экранов графического интерфейса пользователя наследуется класс Activity и используются представления (View) для взаимодействия с пользователем.

Каждая Активность – это экран (по аналогии с Формой), который приложение может показывать пользователям. Чем сложнее создаваемое приложение, тем больше экранов (Активностей) потребуется. При создании приложения потребуется, как минимум, начальный (главный) экран, который обеспечивает основу пользовательского интерфейса приложения. При необходимости этот интерфейс дополняется второстепенными Активностями, предназначенными для ввода информации, ее вывода и предоставления дополнительных возможностей. Запуск (или возврат из) новой Активности приводит к

«перемещению» между экранами UI.

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

Для создания новой Активности наследуется класс Activity. Внутри реализации класса необходимо определить пользовательский интерфейс и реализовать требуемый функционал. Базовый каркас для новой Активности показан ниже:

package com.example.myapplication;
import android.app.Activity; import android.os.Bundle;
public class MyActivity extends Activity {

/** Вызывается при создании Активности */ @Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

}

}
Базовый класс Activity представляет собой пустой экран, который не особенно полезен, поэтому первое, что вам нужно сделать, это создать пользовательский интерфейс с помощью Представлений (View) и разметки(Layout).

Представления (View) – это элементы UI, которые отображают информацию и обеспечивают взаимодействие с пользователем. Android предоставляет несколько классов разметки (Layout), называемых также View Groups, которые могут содержать внутри себя несколько Представлений, для создания пользовательского интерфейса приложения.

Чтобы назначить пользовательский интерфейс для Активности, внутри обработчика onCreate используется метод setContentView:

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView textView = new TextView(this);

setContentView(textView);

}

В этом примере в качестве UI для Активности выступает объект класса TextView.

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

@Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);

}

Для использования Активности в приложении ее необходимо зарегистрировать в Манифесте путем добавления элемента внутри узла , в противном случае ее невозможно будет использовать. Ниже показано, как создать элемент для Активности MyActivity:


android:name=".MyActivity">


В теге можно добавлять элементы для указания Намерений (Intent), которые Активность будет отслеживать. Каждый «Фильтр Намерений» определяет одно или несколько действий (action) и категорий (category), которые поддерживаются Активностью. Важно знать, что Активность будет доступна из главного меню запуска приложений только в случае, если в Манифесте для нее указан для действия MAIN и категории LAUNCHER, как показано на примере:



<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>



Жизненный цикл Активности

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

Состояние каждой Активности определяется ее позицией в стеке (LIFO) Активностей,

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



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

Активности могут находиться в одном из четырех возможных состояний:

    • Активное (Active ). Активность находится на переднем плане (на вершине стека) и имеет возможность взаимодействовать с пользователем. Android будет пытаться сохранить ее работоспособность любой ценой, при необходимости прерывая работу других Активностей, находящихся на более низких позициях в стеке для предоставления необходимых ресурсов. При выходе на передний план другой Активности работа данной Активности будет приостановлена или остановлена.

    • Приостановленное (Paused ). Активность может быть видна на экране, но не может взаимодействовать с пользователем: в этот момент она приостановлена. Это случается, когда на переднем плане находятся полупрозрачные или плавающие (например, диалоговые) окна. Работа приостановленной Активности может быть прекращена, если ОС необходимо выделить ресурсы Активности переднего плана. Если Активность полностью исчезает с экрана, она останавливается.

    • Остановленное (Stopped ). Активность невидима, она находится в памяти,сохраняя информацию о своем состоянии. Такая Активность становится кандидатом на преждевременное закрытие, если системе потребуется память для чего-то другого. При остановке Активности разработчику важно сохранить данные и текущее состояние пользовательского интерфейса (состояние полей ввода, позицию курсора и т. д.). Если Активность завершает свою работу или закрывается, он становится неактивным.

    • Неактивное (Inactive). Когда работа Активности завершена, и перед тем, как она будет запущена, данная Активности находится в неактивном состоянии. Такие Активности удаляются из стека и должны быть (пере)запущены, чтобы их можно было использовать.

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

Для обеспечения полноценного интерфейса приложения, изменения его состояния должны быть незаметными для пользователя. Меняя свое состояние с приостановленного на остановленное или с неактивного на активное, Активность не должна внешне меняться. При остановке или приостановке работы Активности разработчик должен обеспечить сохранение состояния Активности, чтобы его можно было восстановить при выходе Активности на передний план. Для это в классе Activity имеются обработчики событий, переопределение которых позволяет разработчику отслеживать изменение состояний Активности.

Отслеживание изменений состояния Активности

Обработчики событий класса Activity позволяют отслеживать изменения состояний соответствующего объекта Activity во время всего жизненного цикла:




Ниже показан пример с заглушками для таких методов – обработчиков событий:

package com.example.myapplication;
import android.app.Activity; import android.os.Bundle;
public class MyActivity extends Activity {
// Вызывается при создании Активности @Override

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);

// Инициализирует Активность.

}
// Вызывается после завершения метода onCreate

// Используется для восстановления состояния UI @Override

public void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState);

// Восстановить состояние UI из объекта savedInstanceState.

// Данный объект также был передан методу onCreate.

}
// Вызывается перед тем, как Активность снова становится видимой @Override

public void onRestart(){ super.onRestart();

// Восстановить состояние UI с учетом того,

// что данная Активность уже была видимой.

}
// Вызывается когда Активность стала видимой

@Override

public void onStart(){ super.onStart();

// Проделать необходимые действия для

// Активности, видимой на экране

}
// Должен вызываться в начале видимого состояния.

// На самом деле Android вызывает данный обработчик только

// для Активностей, восстановленных из неактивного состояния @Override

public void onResume(){ super.onResume();

// Восстановить приостановленные обновления UI,

// потоки и процессы, «замороженные, когда

// Активность была в неактивном состоянии

}
// Вызывается перед выходом из активного состояния,

// позволяя сохранить состояние в объекте savedInstanceState @Override

public void onSaveInstanceState(Bundle savedInstanceState) {

// Объект savedInstanceState будет в последующем

// передан методам onCreate и onRestoreInstanceState super.onSaveInstanceState(savedInstanceState);

}

// Вызывается перед выходом из активного состояния @Override

public void onPause(){

// «Заморозить» обновления UI, потоки или

// «трудоемкие» процессы, ненужные, когда Активность

// не на переднем плане super.onPause();

}
// Вызывается перед выходом из видимого состояния @Override

public void onStop(){

// «Заморозить» обновления UI, потоки или

// «трудоемкие» процессы, ненужные, когда Активность

// не на переднем плане.

// Сохранить все данные и изменения в UI, так как

// процесс может быть в любой момент убит системой

// без объявления войны super.onStop();

}
// Вызывается перед уничтожением активности @Override

public void onDestroy(){

// Освободить все ресурсы, включая работающие потоки,

// соединения с БД и т. д. super.onDestroy();

}

}


Лабораторная работа «Отслеживание состояний Активности»

  1. В имеющемся проекте HelloAndroidWorld откройте в редакторе класс

HelloAndroidWorld.java.

  1. Переопределите методы onPause, onStart, onRestart для класса и внесите изменения в метод onCreate:

package com.example.helloandroidworld;
import android.app.Activity; import android.os.Bundle; import android.widget.Toast;
public class HelloAndroidWorld extends Activity {

/** Called when the activity is first created. */ @Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState); setContentView(R.layout.main);

Toast.makeText(this, "onCreate()", Toast.LENGTH_LONG).show();

}
@Override

protected void onPause() {

Toast.makeText(this, "onPause()", Toast.LENGTH_LONG).show(); super.onPause();

}

@Override

protected void onRestart() { super.onRestart();

Toast.makeText(this, "onRestart()", Toast.LENGTH_LONG).show();

}

@Override

protected void onStart() { super.onStart();

Toast.makeText(this, "onStart()", Toast.LENGTH_LONG).show();

}

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

  1. Запустите приложение на исполнение в эмуляторе (Ctrl+F11, Android Project) и убедитесь, что при изменении состояния приложения HelloAndroidWorld на экране эмулятора появляются соответствующие уведомления типа Toast, как показано на снимках:




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


1   2   3   4   5   6   7   8   9   ...   20


написать администратору сайта