【Android】すべてのアクティビティを一括で終了する方法を徹底解説
Androidアプリでは、画面遷移のたびにアクティビティがスタックに積み上げられていきます。本記事では、ボタンをタップするだけでアプリ内のすべてのアクティビティを一度に閉じ、アプリを完全に終了させる実装方法を、サンプルコード付きで段階的に解説します。
仕組みのポイント
今回のサンプルの鍵となるのは、SecondActivityのonDestroy()内で呼び出すProcess.killProcess(Process.myPid())です。このメソッドにより、アクティビティだけでなくアプリのプロセスそのものが強制終了され、バックスタックに残っている他のアクティビティもまとめて破棄されます。
手順1:新規プロジェクトを作成する
Android Studioを起動し、メニューから「File」→「New Project」を選択します。必要な項目を入力して、新しいプロジェクトを作成してください。
手順2:activity_main.xmlにレイアウトを記述する
res/layout/activity_main.xml に以下のコードを追加します。TextViewと、次のアクティビティへ遷移するためのButtonを配置しています。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_above="@id/button" android:text="Activity_One" android:gravity="center" android:layout_marginBottom="20sp" /> <Button android:id="@+id/button" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Click here to start Second Activity!" android:layout_centerInParent="true" /> </RelativeLayout>
手順3:MainActivity.javaを実装する
src/MainActivity.java に以下のコードを追加します。ボタンがクリックされると、Intentを使ってSecondActivityへ遷移します。
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button = (Button)findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivity(intent);
}
});
}
}手順4:SecondActivityのレイアウトを作成する
新しいアクティビティ(SecondActivity)を作成し、res/layout/activity_second.xml に以下のコードを追加します。ここには「全アクティビティを終了する」ためのボタンを配置します。
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout 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=".SecondActivity"> <Button android:id="@+id/terminateButton" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Terminate all the activities" android:layout_centerInParent="true"/> </RelativeLayout>
手順5:SecondActivity.javaを実装する
src/SecondActivity.java に以下のコードを追加します。ボタンクリックでfinish()を呼び出し、その後のonDestroy()内でプロセスを強制終了することで、すべてのアクティビティを一括で閉じます。
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.os.Process;
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
Button button = (Button)findViewById(R.id.terminateButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
protected void onDestroy(){
Process.killProcess(Process.myPid());
super.onDestroy();
}
}手順6:AndroidManifest.xmlを編集する
androidManifest.xml に以下のコードを追加します。SecondActivityを宣言し、MainActivityをランチャー(起動)アクティビティとして設定しています。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="https://schemas.android.com/apk/res/android" package="app.com.sample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".SecondActivity"></activity> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest>
アプリを実行して動作を確認する
それでは、実際にアプリを起動してみましょう。Android端末をPCに接続した状態で、Android Studioのツールバーにある「Run」アイコンをクリックします。デバイス選択ダイアログで自分の端末を選択すると、端末に初期画面が表示されます。
まず最初の画面(MainActivity)が表示されます。

ボタンをタップするとSecondActivityへ遷移します。

「Terminate all the activities」ボタンを押すと、プロセスごと終了し、すべてのアクティビティが閉じられます。

補足:より推奨される代替手段
Process.killProcess()は強制的にプロセスを終了させる手法のため、状態保存が行われず、挙動がOSバージョンによって異なる場合があります。タスク全体を安全に終了したい場合は、API Level 16以降で利用できるfinishAffinity()を使うか、適切なフラグ(FLAG_ACTIVITY_CLEAR_TOP や FLAG_ACTIVITY_NEW_TASK と CLEAR_TASK の組み合わせ)を設定したIntentでホーム画面へ遷移する方法も検討するとよいでしょう。
-
iOS 7のSafariで開いているタブをすべて一括で閉じる方法
iOS 7 の Safari には、開いているタブをすべて一括で閉じられる便利な機能が隠されています。この方法を知らないと、多くの人はタブ画面の各カード左上にある「×」ボタンを、1枚ずつ押して閉じていくことになりますよね。 閉じたいタブが1〜2枚程度ならそれでも問題ありませんが、iPhone で何十枚ものタブを開きっぱなしにしている人にとっては、ひとつずつ閉じるのはかなり面倒な作業です。そこで活用したいのが、以下の簡単な手順です。 すべてのタブを一括で閉じる手順 画面下部の新しいタブボタン(2つの四角が重なったアイコン)をタップします。 表示される「プライベート」のリンクをタップします。
-
すべてのAndroidアプリを一括で自動更新する方法【初心者向けガイド】
Androidは世界で最も普及しているオペレーティングシステムです。数十億人に利用されており、パワフルで高度にカスタマイズ可能な魅力的なOSとして知られています。アプリは、一人ひとりのユーザーにパーソナライズされた独自の体験を提供する上で重要な役割を果たしており、まさにAndroidスマートフォンの「魂」とも呼べる存在です。端末にプレインストールされているアプリもあれば、Playストアから追加する必要があるアプリもありますが、どのアプリであっても定期的なアップデートが欠かせません。開発者はアプリのパフォーマンス向上やバグ・不具合の修正のため、頻繁にアップデートをリリースしています。最適なパフォ