Android
 Computer >> コンピューター >  >> プログラミング >> Android

Androidでシングルトンクラスを使う方法をサンプルコード付きで解説

シングルトンデザインパターンとは?

実装例に入る前に、まず「シングルトンデザインパターン」についておさらいしておきましょう。シングルトン(Singleton)とは、あるクラスのインスタンス生成をアプリケーション全体で1つだけに制限するデザインパターンです。主な用途としては、同時実行(並行処理)の制御や、アプリケーションがデータストアへアクセスするための中心的なアクセスポイントの作成などが挙げられます。

この記事では、Androidアプリでシングルトンクラスを実際に使う方法を、ステップごとのサンプルコードとともに解説します。

手順1:新規プロジェクトを作成する

Android StudioでFile → New Projectを選択し、必要事項をすべて入力して新しいプロジェクトを作成します。

手順2:レイアウトファイル(activity_main.xml)を編集する

res/layout/activity_main.xml に、以下のコードを記述してください。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="Enter text" />

    <Button
        android:id="@+id/save"
        android:text="save in singleton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

このレイアウトでは、テキスト入力用の EditText と保存用の Button を縦方向(vertical)に配置しています。ユーザーがボタンをクリックすると、EditTextに入力された文字列を取得してシングルトンクラスに格納し、その値をToastで画面に表示する仕組みです。

手順3:MainActivity.java を実装する

続いて、src/MainActivity.java に以下のコードを追加します。

package com.example.andy.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    EditText editText;
    Button save;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = findViewById(R.id.editText);
        save = findViewById(R.id.save);
        save.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (editText.getText().toString().isEmpty()) {
                    editText.setError("Enter text");
                } else {
                    String editValue = editText.getText().toString();
                    singleTonExample singletonexample = com.example.andy.myapplication.singleTonExample.getInstance();
                    singletonexample.setText(editValue);
                    Toast.makeText(MainActivity.this, singletonexample.getText(), Toast.LENGTH_LONG).show();
                }
            }
        });
    }
}

上記のコードでは、singleTonExample をシングルトンクラスとして利用しています。そこで次に、singleTonExample.java という名前で新しいクラスを作成し、以下のように実装しましょう。

package com.example.andy.myapplication;

public class singleTonExample {

    String editValue;
    private static final singleTonExample ourInstance = new singleTonExample();

    public static singleTonExample getInstance() {
        return ourInstance;
    }

    private singleTonExample() { }

    public void setText(String editValue) {
        this.editValue = editValue;
    }

    public String getText() {
        return editValue;
    }
}

シングルトンクラスの実装ポイント

この singleTonExample クラスには、シングルトンパターンに欠かせない3つの要素が含まれています。

  • privateなコンストラクタ:外部から new でインスタンスを自由に生成できないようにします。
  • staticな自身のインスタンス:クラス内で唯一のインスタンス(ourInstance)を保持します。
  • getInstance() メソッド:どこから呼び出しても常に同じインスタンスを返す、グローバルなアクセスポイントとなります。

アプリを実行して動作を確認しよう

それでは、アプリを実際に実行してみましょう。ここでは、実機のAndroidスマートフォンをパソコンに接続しているものとします。Android Studioからアプリを起動するには、プロジェクト内のいずれかのアクティビティファイルを開き、ツールバーのRun(実行)アイコンをクリックします。デバイスの選択画面で自分のモバイル端末を選択すると、端末側に次のような初期画面が表示されます。

Androidでシングルトンクラスを使う方法をサンプルコード付きで解説

上のスクリーンショットでは「tutorialspoint.com」と入力した状態です。この状態でボタンをタップすると、シングルトンクラスに保存されたデータが読み出され、以下のようにToastとして表示されます。

Androidでシングルトンクラスを使う方法をサンプルコード付きで解説

まとめ

シングルトンパターンは、設定情報やログイン状態など、アプリ全体で共有したいデータを一元管理するのに便利な手法です。ただし、ActivityやViewなどContextを持つオブジェクトをシングルトンに保持させるとメモリリークの原因になるため、保持するのは軽量なデータにとどめるのが安全です。用途に応じて適切に活用しましょう。

  1. Androidローダーの使い方とは?連絡先一覧を表示する実装例をステップ解説

    Androidローダー(Loader)とはローダーは、Android 3.0(APIレベル11)で導入された、バックグラウンドで非同期にデータを読み込むための仕組みです。UIスレッドをブロックすることなくコンテンツプロバイダやデータベースからデータを取得でき、画面回転などの設定変更時にも読み込み済みのデータを再利用できるのが大きな特徴です。本記事では、ローダー(CursorLoader)を使って端末の連絡先一覧をListViewに表示する方法を、サンプルコード付きでステップごとに解説します。ステップ1:新しいプロジェクトを作成するAndroid Studioを起動し、メニューから「File」⇒

  2. 【Android】LocalBroadcastManagerの使い方を実例付きでわかりやすく解説

    LocalBroadcastManagerとは? LocalBroadcastManagerは、アプリ内部だけで完結するブロードキャスト(Intent)の送受信を行うためのクラスです。システム全体や他アプリには通知されないため、セキュリティ面でも安全で、アプリ内のコンポーネント間でデータを受け渡したい場合に便利です。 本記事では、実際に動くサンプルプロジェクトを作りながら、LocalBroadcastManagerの基本的な実装手順をステップごとに紹介します。 Step 1:新規プロジェクトの作成 まず、Android Studioを起動し、「File → New Project」から新しい