Статьи

Сервисы Android

Вступление

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

Вторая форма службы Android предоставляет интерфейс для удаленного объекта. Оба расширяют класс Service и переопределяют определенные функции для обеспечения желаемой функциональности. Эта статья будет посвящена первой форме услуги.

Службы обычно можно остановить, запустить и контролировать из других приложений. Эти приложения включают другие Услуги или Действия. Услуги также получают более высокий приоритет, чем любая неактивная или невидимая деятельность. Это означает, что ваша служба с меньшей вероятностью будет преждевременно остановлена ​​менеджером ресурсов.

 

Создать сервис

Чтобы создать сервис Android, вы должны создать класс, который расширяет android.app.Service. Для обеспечения базового контроля и функциональности вы можете переопределить методы onCreate (), onStart () и onDestroy (). Вы также должны добавить службу в файл манифеста приложения. Это можно сделать с помощью подключаемого модуля Eclipse ADT или добавив служебный блок в файл AndroidManifest.xml.

Вот скелет сервис, который я буду раскрывать в этой статье:

package com.demo.service;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class RSSService extends Service {

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {
super.onCreate();
}

@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
}

@Override
public void onDestroy() {
super.onDestroy();
}

}

 

Вот запись ApplicationManifest.xml для примера службы в этой статье:

<service android:permission="android.permission.INTERNET" android:name=".RSSService" android:enabled="true"></service>

Простой пользовательский интерфейс

Я предоставлю простой интерфейс для управления Сервисом в этом приложении. Вот снимок экрана пользовательского интерфейса:

 

Вот main.xml для макета:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:gravity="center">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="RSS Service Demo" android:gravity="center" android:textSize="20sp" android:padding="20dp"/>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/buttonStart" android:text="Start"></Button>
<Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Stop" android:id="@+id/buttonStop"></Button>
</LinearLayout>

 

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

// Start the RSSService
startService(new Intent(this, RSSService.class));

// Stop the RSSService
stopService(new Intent(this, RSSService.class))

 

Вот код пользовательского интерфейса, который использует этот код: 

package com.demo.service;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {

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

Button startButton = (Button) findViewById(R.id.buttonStart);
startButton.setOnClickListener(
new OnClickListener() {

@Override
public void onClick(View arg0) {
Log.d("com.demo.service", "starting service.");

// Start the RSSService
startService(new Intent(MainActivity.this, RSSService.class));
}
});

Button stopButton = (Button) findViewById(R.id.buttonStop);
stopButton.setOnClickListener(
new OnClickListener() {

@Override
public void onClick(View v) {
Log.d("com.demo.service", "stopping service.");

// Stop the RSSService
stopService(new Intent(MainActivity.this, RSSService.class)) }
});
}
}

 

Сервисный код RSS

Теперь давайте посмотрим на наш скелет RSS-сервис. Я буду использовать этот сервис в будущих статьях. На данный момент этот сервис очень прост и просто отвечает за запуск и уничтожение элементов управления. 

package com.demo.service;

import java.util.Date;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;

public class RSSService extends Service {

private Timer updateTimer;
private Date lastRead = new Date(1, 1, 1);

@Override
public IBinder onBind(Intent arg0) {
return null;
}

@Override
public void onCreate() {

updateTimer = new Timer("RSSServiceUpdateTimer");
}

@Override
public void onStart(Intent intent, int startId) {

Toast.makeText(this, "RSSService Startedd", Toast.LENGTH_LONG).show();

// TODO: Read from user preferences
int period = 10;

// cancel the current timer
updateTimer.cancel();

// create a new timer
updateTimer = new Timer("RSSServiceUpdateTimer");
updateTimer.scheduleAtFixedRate(
new TimerTask() {

@Override
public void run() {
RSSService.this.refreshFeed();
}

}, 0, period*60*1000);
}

protected void refreshFeed() {
// perform http lookup for new feeds
}

private void announceNewFeed(RSSMessage feed) {

}

@Override
public void onDestroy() {
super.onDestroy();

Toast.makeText(this, "RSSService Stopped", Toast.LENGTH_LONG).show();
}

}

Это основной класс для Сервиса, и именно здесь реализуются методы onStart, onDestroy и onCreate. В этом простом примере мы создаем таймер обновления в методе onCreate. В методе onStart мы устанавливаем таймер обновления на автоматический запуск через определенный интервал. Этот интервал жестко задан для этого примера, но реальное приложение предоставит пользователям возможность настроить этот параметр. Когда таймер срабатывает, мы делаем работу.

Вывод

Сервисы Android — мощное дополнение к арсеналу Android. Они дают вашему приложению возможность выполнять автономную обработку и / или уведомлять несколько запущенных приложений о своем прогрессе. Службы являются важной частью сообщества Android, поэтому им предоставляется приоритет, когда Android необходимо очистить или освободить память. Вы даже можете открывать объекты через AIDL (язык определения интерфейса Android) для потребителей. 

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

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