現在のアクティビティと基底アクティビティクラスを取得する
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)
アクティビティに対する操作