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

AndroidのArrayBlockingQueueで残り容量を取得する方法【remainingCapacity()徹底解説】

Android開発では、スレッド間で安全にデータをやり取りするためにArrayBlockingQueueがよく利用されます。本記事では、ArrayBlockingQueueのremainingCapacity()メソッドを使って、キューの残り容量を取得する方法をサンプルコードとともにわかりやすく解説します。

ArrayBlockingQueueとは

ArrayBlockingQueueは、FIFO(First In, First Out:先入れ先出し)方式で動作するブロッキングキューです。最初に追加された要素が最も長くキュー内に残り、最後に追加された要素が最も短い期間キューに留まります。内部は配列ベースで実装されており、容量はインスタンス生成時に指定したサイズで固定される点が特徴です。

サンプルプロジェクトの作成手順

ステップ1:新規プロジェクトを作成する

Android Studioを開き、File → New Projectを選択します。必要な項目をすべて入力して、新しいプロジェクトを作成しましょう。

ステップ2:レイアウトファイルを編集する

res/layout/activity_main.xmlに以下のコードを追加します。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:gravity="center"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">

    <TextView
        android:id="@+id/actionEvent"
        android:textSize="40sp"
        android:layout_marginTop="30dp"
        android:layout_width="wrap_content"
        android:layout_height="match_parent" />
</LinearLayout>

上記のコードでは、ArrayBlockingQueueの内容や残り容量を表示するためのTextViewを画面中央に配置しています。

ステップ3:MainActivity.javaを編集する

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

package com.example.myapplication;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import java.util.concurrent.ArrayBlockingQueue;

public class MainActivity extends AppCompatActivity {
    ArrayBlockingQueue<String> arrayBlockingQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        arrayBlockingQueue = new ArrayBlockingQueue<>(50);
        final TextView actionEvent = findViewById(R.id.actionEvent);
        arrayBlockingQueue.add("sai");
        arrayBlockingQueue.add("ram");
        arrayBlockingQueue.add("krishna");
        arrayBlockingQueue.add("prasad");
        actionEvent.setText("" + arrayBlockingQueue);
        actionEvent.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("SetTextI18n")
            @Override
            public void onClick(View v) {
                actionEvent.setText("" + arrayBlockingQueue.remainingCapacity());
            }
        });
    }
}

コードのポイント解説

このコードでは、まず容量50のArrayBlockingQueueインスタンスを生成し、「sai」「ram」「krishna」「prasad」の4つの文字列を追加しています。起動直後はキューの中身をそのままTextViewに表示します。

TextViewをクリックすると、onClick()内でremainingCapacity()メソッドが呼び出され、キューにあとどれだけ要素を追加できるかが画面に表示されます。この例では容量50に対して4要素が追加済みのため、結果として「46」が返されます。

アプリを実行して結果を確認する

それでは、アプリケーションを実行してみましょう。ここでは、実際のAndroid端末がパソコンに接続されているものとします。Android Studioからアプリを実行するには、プロジェクト内のアクティビティファイルを開き、ツールバーの実行アイコンをクリックしてください。接続済みのモバイルデバイスを選択すると、端末に以下のような初期画面が表示されます。

AndroidのArrayBlockingQueueで残り容量を取得する方法【remainingCapacity()徹底解説】

次に、画面上のTextViewをタップすると、キューの残り容量が以下のように表示されます。

AndroidのArrayBlockingQueueで残り容量を取得する方法【remainingCapacity()徹底解説】

まとめ

ArrayBlockingQueueのremainingCapacity()メソッドを使えば、キューにあといくつの要素を挿入できるかを簡単に取得できます。マルチスレッド環境でのバッファ管理や、キューの満杯チェックなどに役立つ便利なメソッドなので、ぜひ活用してみてください。

  1. AndroidスマホでAirTagを検出する方法|紛失タグの見つけ方を徹底解説

    Appleの「AirTag」は、鍵や財布、バッグなど、あらゆる持ち物の位置を追跡できる便利なアイテムとして近年急速に普及しています。しかし、その利便性の裏側では、知らないうちに自分の所持品へ取り付けられ、居場所を監視される「ストーカー行為」への懸念も高まっています。特にAndroidユーザーにとっては、iPhoneと比べて検知の仕組みが異なるため、注意が必要です。iPhoneやiPadをお使いの方なら、他人のAirTagが自分と一緒に移動している場合、デバイスに自動的にアラートが表示されます。ところがAndroidユーザーの場合、同じようにはいかず、いくつかの手順を踏まなければ、自分の持ち物に

  2. AndroidでWi-Fiパスワードを確認する方法【Android 10以降と9以前の対処法】

    自宅や職場で快適なWi-Fi環境があることは、今や欠かせないものになりつつあります。仕事から日常のさまざまな活動まで、オンライン状態に依存する場面が多いため、Wi-Fiに接続できないと非常に不便です。特に困るのが、パスワードを忘れてしまって接続できないケースでしょう。 友人や家族が訪ねてきて「Wi-Fiのパスワード教えて」と言われたとき、うまく答えられずガッカリさせた経験はありませんか?実はこれはあなたのせいではありません。パスワードは何ヶ月も前、あるいは数年前に設定したきり、端末に保存されているため再入力する必要がなく、忘れてしまうのが自然だからです。 さらに厄介なことに、Androidは保