クティビティに対する操作

現在のアクティビティと基底アクティビティクラスを取得する

Javaの基底クラスBaseActivityを作成し、継承させる

android.support.v7.app.AppCompatActivity

この基底クラスの中でonCreateメソッドをオーバーライドします

その中にログを追加します

Log.d(“現在のアクティビティ”,getClass().getSimpleName());

こうすることで、どのアクティビティに遷移しても現在のアクティビティを確認できます

package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("現在のアクティビティ",getClass().getSimpleName());
    }
}Code language: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/現在のアクティビティ: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/現在のアクティビティ: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/現在のアクティビティ: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/現在のアクティビティ: NormalActivity

ワンクリックでアプリを終了

3番目のアクティビティにいる場合、アプリを終了するには戻るボタンを3回押す必要があり手間がかかります

ホームボタンを押してもアプリは終了せず、一時停止状態になるだけです。

では、ワンクリックでアプリを終了させるにはどうすればよいでしょうか。

全アクティビティを管理する専用のコレクションクラスを作成します。

この処理を扱うアクティビティマネージャーを追加します

これはコレクションクラスで、すべてのアクティビティを保持するListを持ちます。addとremoveメソッドでリストへの追加・削除を行います

基底アクティビティのonCreateでadd、onDestroyでremoveを呼び出します

これによりListにはアクティビティスタック上に存在するものだけが保持されます

Listには各アクティビティの参照を保持しているため、finishを呼び出すと対象のアクティビティに対して実行されます。

次にコレクションクラスにfinishAllメソッドを追加します

このメソッドではforeachループを使い、それぞれのアクティビティのfinishを呼び出します

では実際に試してみましょう

3番目のアクティビティにボタンのクリックイベントを登録し、このコレクションクラスを呼び出します。

finishAllは静的メソッドとしてまとめます。

完全に終了させるため、システムのkillProcessメソッドで現在のアプリプロセスを強制終了できます。

android.os.Process.KillProcess(android.os.Process.myPid());

アクティビティマネージャークラス

package com.foxdevelop.www.lifedemo;
import android.app.Activity;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
public class ActivityHelper {
    public  static List<Activity> activities = new ArrayList<Activity>();
    public static void add (Activity a)
    {
        activities.add(a);
    }
    public static void remove (Activity a)
    {
        activities.remove(a);
    }
    public  static void finishAll()
    {
        for (Activity a:activities)
        {
            a.finish();
        }
    }
}Code language: JavaScript (javascript)

基底アクティビティでアクティビティの追加・削除

アクティビティ作成時に追加:onCreate

アクティビティ破棄時に削除:onDestroy

package com.foxdevelop.www.lifedemo;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("現在のアクティビティ",getClass().getSimpleName());
        ActivityHelper.add(this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityHelper.remove(this);
    }
}Code language: JavaScript (javascript)

Activity3にボタンを追加しfinishAllメソッドを呼び出す

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="3番目のアクティビティ" />
    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="アプリ終了" />
</LinearLayout>Code language: HTML, XML (xml)
public class Activity3 extends BaseActivity {
    private static final String TAG = "3番目のアクティビティ";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_3);
        Log.e(TAG, "" + getTaskId());
        Button b = (Button)findViewById(R.id.button);
        b.setOnClickListener(
                new View.OnClickListener(){
                    @Override
                    public void onClick(View view){
                        ActivityHelper.finishAll();
                    }
                }
        );
    }
}Code language: PHP (php)

アクティビティに対する操作

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です