Смотрим плавность хода с помощью BMW Rheingold

Всем знакома ситуация, когда двигатель немного "троит", но пропусков зажигания нет...

Дельта синхронизация без облака

Ранее мы показывали разные способы синхронизации криптодиска между ПК и Android-устройством.

Облачный хостинг VDS за 2 минуты

Настоящий облачный VDS-хостинг от UltraVDS: тестируем производительность

Дельта-синхронизация крипто-дисков

Существуют разные способы зашифровать "облако". Один из них - поместить в облако крипто-диск. В предыдущей статье мы писали, почему это не всегда удобно.

Деятельности и намерения в Android


© Денис Колисниченко

Любое приложение может содержать следующие компоненты:

  • Activity - деятельность.
  • Service - служба.
  • BroadcastReceiver - приемник широковещательных намерений.
  • ContentProvider - контент-провайдер.

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

Какие компоненты должны быть именно в вашем приложении, зависит от самого приложения, то есть того, что вам нужно сделать. Если нужно организовать интерфейс пользователя (например, получить от пользователя ввод), тогда в вашем приложении обязательно должна быть деятельность (Activity).

При разработке фонового процесса, например, для воспроизведения музыки или фонового обновления деятельности, вам пригодится служба (Service).

Для обращения к ресурсам телефона, например, доступа к контактам телефона, вам нужен контент-провайдер (Content-Provider). Для получения же широковещательных сообщений (с целью реакции на какие-то события телефона) используется BroadcastReceiver.

Намерение (Intent) — это действие. Компоненты приложения вызываются с помощью намерений. Например, вы можете вызвать браузер с помощью намерения:

Intent Mybrowser = Intent(Intent.ACTION_VIEW);

Mybrowser.setData(Uri.parse("https://www.google.com"));

startActivity(Mybrowser);

Аналогично, вы можете вызвать компонент своего собственного приложения. Пусть у вас есть приложение, в котором имеется две (или более) деятельности (два или более окна). Вызвать вспомогательное окно можно только с помощью намерения.

Представим, что вы разрабатываете приложение, в котором есть меню. В меню есть кнопка Start, которая запускает другую деятельность в главном окне. Обработчик нажатия кнопки Start будет таким:

Intent startButton = new Intent(this, StartButton.class);

startActivity(startButton);

В нашем проекте должен быть класс StartButton. "Болванка" для этого класса приведена в листинге 1. Наш класс ничего не делает — он просто находит в файле разметки деятельности кнопку the_end и устанавливает для нее обработчик — функцию finish(). Напомню, чтобы добавить класс StartButton в проект, нужно щелкнуть на проекте (в области Package Explorer) правой кнопкой мыши и выберите команду New, Class.

Листинг 1. Файл StartButton.java

package com.samples.startgame;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

public class StartButton extends Activity {

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// файл разметки называется app.xml

setContentView(R.layout.app);

// обработка кнопки завершения программы

Button endButton = (Button) findViewById(R.id.the_end);

endButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View view) {

finish();

}

});

}

}

Файл разметки для деятельности StartButton представлен в листинге 2.

Листинг 2. Файл разметки для деятельности StartButton (res/layout/app.xml)

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

<Button android:id="@+id/the_end"

android:layout_width="100dip"

android:layout_height="100dip"

android:text="@string/the_end"

android:layout_centerInParent="true"

/>

</LinearLayout>

В файле манифеста нужно зарегистрировать нашу новую деятельность и установить для нее действия — VIEW и DEFAULT (листинг 3). 

Листинг 3. Файл манифеста для приложения с несколькими деятельностями

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="https://schemas.android.com/apk/res/android"

android:versionCode="1"

android:versionName="1.0"

package="com.samples.startbutton">

<application android:icon="@drawable/icon"

android:label="@string/app_name">

   <activity android:name=".Menu"

android:label="@string/app_name">

<intent-filter>

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

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

</intent-filter>

   </activity>

   <activity android:name=".StartButton"

android:label="@string/app_name">

<intent-filter>

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

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

</intent-filter>

   </activity>

</application>

<uses-sdk android:minSdkVersion="3" />

</manifest>