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

【Android】シングルトンインスタンスをクリアする方法をコード例付きで解説


シングルトンパターンとは?

サンプルを見ていく前に、まずシングルトンデザインパターンについて簡単におさらいしておきましょう。シングルトンとは、あるクラスのインスタンス生成を「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">
    <Button
        android:id = "@+id/show"
        android:text = "Clear instance in singleTone"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content" />
</LinearLayout>

このレイアウトにはボタンを1つだけ配置しています。ユーザーがこのボタンをタップすると、シングルトンのインスタンスがクリアされる仕組みです。

ステップ3:MainActivity.java の実装

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

package com.example.andy.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.json.JSONException;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {
    Button show;
    JSONObject jsonObject;
    singleTonExample singletonexample;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        show = findViewById(R.id.show);
        singletonexample = singleTonExample.getInstance();
        singletonexample.init(getApplicationContext());
        show.setOnClickListener(new View.OnClickListener() {
        @Override
            public void onClick(View v) {
                singletonexample.clearInstance();
                Toast.makeText(MainActivity.this, "Removed Single tone instance", Toast.LENGTH_LONG).show();
            }
        });
    }
}

ここでは singleTonExample をシングルトンクラスとして使用しています。そのため、singleTonExample.java というクラスを新規作成し、以下のコードを追加しましょう。

package com.example.andy.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.view.Window;
import org.json.JSONObject;
import java.util.Arrays;
public class singleTonExample {
    private Context appContext;
    private Dialog dialog;
    JSONObject i1;
    private static singleTonExample ourInstance = new singleTonExample();
    public void init(Context context) {
        if(appContext == null) {
            this.appContext = context;
        }
    }
    private Context getContext() {
        return appContext;
    }
    public static Context get() {
        return getInstance().getContext();
    }
    public static synchronized singleTonExample getInstance() {
        return ourInstance;
    }
    private singleTonExample() { }
    public void clearInstance() {
        ourInstance = null;
    }
}

実装のポイントと注意点

clearInstance() メソッドでは、static フィールド ourInstance に null を代入することでインスタンスを破インスタンスを破棄しています。ただしこのシンプルな実装には注意が必要です。getInstance() は単純に ourInstance を返すだけのため、クリア後に getInstance() を呼び出すと null が返され、NullPointerException が発生する可能性があります。

実務で利用する場合は、getInstance() の内部で ourInstance が null のときにインスタンスを再生成するなど、防御的な実装を加えておくとより安全です。

アプリの実行と動作確認

それでは、実際にアプリケーションを実行してみましょう。ここでは、実機のAndroidスマートフォンをPCに接続しているものとして説明します。

  1. Android Studioでプロジェクト内のアクティビティファイルを開きます。
  2. ツールバーのRun(実行)アイコンをクリックします。
  3. 選択肢から接続済みのモバイルデバイスを選び、アプリを起動します。

起動すると、端末に次のようなデフォルト画面が表示されます。

【Android】シングルトンインスタンスをクリアする方法をコード例付きで解説

続けて、画面上のボタンをタップしてみましょう。以下のようにシングルトンのインスタンスがクリアされ、トーストで完了メッセージが表示されます。

【Android】シングルトンインスタンスをクリアする方法をコード例付きで解説

  1. Androidのキャッシュをクリアする方法|手動・アプリを使った簡単な削除手順を徹底解説

    記事のポイント:スマートフォンに溜まった不要なデータは、ストレージ容量を圧迫します。本記事では、Androidのキャッシュを「Smart Phone Cleaner」を使って素早く簡単に削除する方法と、手動でクリアする方法を詳しくご紹介します。 スマートフォンは長く使うほど不要なデータが蓄積され、端末のパフォーマンスが徐々に低下していきます。Androidの動作が重くなったと感じたら、まずは不要なファイルの整理から始めましょう。ジャンクファイルや一時ファイルだけでなく、キャッシュも併せて削除することが大切です。キャッシュは大量のストレージを占有する原因になるため、正しい削除方法を知っておきま

  2. Androidのキャッシュをクリアする方法!手動・アプリ両方の手順を徹底解説

    人間が日を追うごとに若返る姿を見たことがありますか?ないはずです。実はガジェットも同じことが言えます。使えば使うほどスムーズに動作し続けるデバイスは、ほとんど存在しないのです。 では、なぜこのようなことが起こるのでしょうか。パソコンの動作が遅くなるのは、データや不要なジャンクファイルが蓄積していくからです。同様に、Android端末もキャッシュが溜まることで動作が不安定になり、挙動がおかしくなることがあります。 Android端末における「キャッシュ」とは? キャッシュデータとは、より高速なアクセスを実現するために、端末のメモリ上に保存された元データのコピーのことです。簡単に言えば、アプリやシ