Androidでバックグラウンドサービスを作成する方法をステップごとに解説
Androidのサービス(Service)とは?
本題に入る前に、Androidにおける「サービス」とは何かを簡単に確認しておきましょう。サービスとは、UI(ユーザーインターフェース)と直接やり取りすることなく、バックグラウンドで処理を実行するためのアプリコンポーネントです。最大の特徴は、アクティビティが破棄された後も処理を続けられる点にあります。
この記事では、実際のコード例を使いながら、Androidでバックグラウンドサービスを作成する手順をステップごとにわかりやすく解説します。
ステップ1:Android Studioで新規プロジェクトを作成する
まず、Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成してください。
ステップ2:activity_main.xmlにコードを追加する
res/layout/activity_main.xml に以下のコードを記述します。
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "https://schemas.android.com/apk/res/android"
xmlns:app = "https://schemas.android.com/apk/res-auto"
xmlns:tools = "https://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity">
<TextView
android:id = "@+id/text"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:text = "サービスを開始"
android:textSize = "25sp"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintLeft_toLeftOf = "parent"
app:layout_constraintRight_toRightOf = "parent"
app:layout_constraintTop_toTopOf = "parent" />
</android.support.constraint.ConstraintLayout>このレイアウトでは、画面中央に1つのTextViewを配置しています。ユーザーがこのTextViewをタップするたびに、サービスの開始と停止が切り替わる仕組みです。
ステップ3:MainActivity.javaを実装する
src/MainActivity.java に以下のコードを追加します。
package com.example.andy.myapplication;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView text = findViewById(R.id.text);
text.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (text.getText().toString().equals("実行中")) {
text.setText("停止中");
stopService(new Intent(MainActivity.this, service.class));
} else {
text.setText("実行中");
startService(new Intent(MainActivity.this, service.class));
}
}
});
}
}このコードでは、Intentを使ってサービスを開始・停止しています。startService() メソッドと stopService() メソッドに対して、Context(ここでは MainActivity.this)と対象のサービスクラスを渡すのが基本形です。TextViewに表示されているテキストの内容によって、現在の状態を判定して処理を分岐させている点もポイントです。
サービスクラスを作成する
続いて、パッケージフォルダ内に service.java という名前でサービスクラスを作成し、以下のコードを追加します。
package com.example.andy.myapplication;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.widget.Toast;
public class service extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Toast.makeText(this, "サービスを開始しました", Toast.LENGTH_LONG).show();
return START_STICKY;
}
@Override
public void onDestroy() {
super.onDestroy();
Toast.makeText(this, "サービスを停止しました", Toast.LENGTH_LONG).show();
}
}onStartCommand() はサービスが開始されるたびに呼び出されるメソッドで、ここではToastで開始を通知しています。戻り値を START_STICKY に設定すると、システムに強制終了された場合でもサービスが自動的に再生成されます。また、onDestroy() はサービスが破棄されるタイミングで呼び出されるメソッドです。
ステップ4:AndroidManifest.xmlにサービスを宣言する
manifest.xml に以下のコードを追加します。Serviceクラスはマニフェストへの宣言が必須なので、忘れずに登録しましょう。
<?xml version = "1.0" encoding = "utf-8"?>
<manifest xmlns:android = "https://schemas.android.com/apk/res/android"
package = "com.example.andy.myapplication">
<application
android:allowBackup = "true"
android:icon = "@mipmap/ic_launcher"
android:label = "@string/app_name"
android:roundIcon = "@mipmap/ic_launcher_round"
android:supportsRtl = "true"
android:theme = "@style/AppTheme">
<activity android:name = ".MainActivity">
<intent-filter>
<action android:name = "android.intent.action.MAIN" />
<category android:name = "android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name = ".service"/>
</application>
</manifest>特に重要なのは <service android:name = ".service"/> の部分です。application 要素の中で、作成したサービスクラスを宣言しています。
アプリを実行して動作を確認する
それでは、実際にアプリを実行してみましょう。ここでは、実機のAndroidスマートフォンがPCに接続されているものとします。Android Studioでプロジェクト内のアクティビティファイルを開き、ツールバーの「Run」アイコンをクリックします。実行デバイスとして自分のスマートフォンを選択すると、端末に以下のような初期画面が表示されます。

上の画像が初期画面です。TextViewをタップすると、次のようにサービスが起動します。

サービスが起動した状態で、もう一度TextViewをタップすると、以下のようにサービスが停止します。

まとめ
Androidのバックグラウンドサービスは、UIを持たずに継続的な処理を実行できる強力なコンポーネントです。今回は最小構成のサンプルとして、TextViewのタップでサービスを開始・停止する方法を紹介しました。実際の開発では、位置情報の取得や音楽再生など、UIに依存しない処理を実装する際にサービスが活用されます。
-
AndroidアプリでTextToSpeech(音声読み上げ)機能を実装する方法をわかりやすく解説
このチュートリアルでは、AndroidアプリにTextToSpeech(音声合成・TTS)機能を実装し、入力したテキストを音声で読み上げる方法を解説します。サンプルでは、シークバーを使って音声のピッチ(声の高さ)とスピード(話す速さ)を調整できる、実用的な構成になっています。 手順1:Android Studioで新規プロジェクトを作成 Android Studioを起動し、メニューから File ⇒ New Project を選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。 手順2:レイアウトファイル(activity_main.xml)を編集 res/layou
-
FacebookでAndroidアプリを作成する方法|開発者サイトでの設定手順を徹底解説
この記事では、FacebookでAndroidアプリを作成する方法について詳しく解説します。AndroidアプリとFacebookを連携させるには、Facebook開発者サイトでFacebookアプリを作成し、Facebook App IDを取得する必要があります。以下の手順に従って、順番に進めていきましょう。 準備:Facebook開発者サイトで新しいアプリを追加する まず、https://developers.facebook.com/ にアクセスし、「新しいアプリを追加」をクリックしてアプリの作成を開始します。 ステップ1:アプリ名とメールアドレスを入力する 指定されたフィールドに、作