=== 目次 ===
アプリを直接に終了させる方法はない!
ではアプリを終了させるにはこのメソッドを…と紹介したいところですが、アプリを終了させるようなメソッドは存在しません。
これはAcitivtyのライフタイム設計思想から、アプリをいきなり終了するというのは外れているからだと思います。
「そんなこと言ってもアプリを終了させたいんだもん」という方のために、
少し無理やりですがアプリを終了させる方法を紹介します。
アプリを終了させる方法
アプリを終了させるにはすべてのActivityをfinishさせれば良いです。つまり、アプリのどこかにActivityのリストを作成しておき、アプリを終了させたいときにリスト内のすべてのActivityをfinishさせます。
なお通常の方法では、アプリのどこからでもアクセスできるリストというものは作成できませんが、以下の記事で紹介したApplicationオブジェクトを利用する方法で可能です。
サンプルコード
以下にサンプルコードを記載します。なお、このサンプルコードは上記の記事のApplicationオブジェクト共有の方法を前提に書いていますので、よく分からない場合は上記の記事を参照ください。
Common.java
public class Common extends Application {
ArrayList<Activity> ActivityList = new ArrayList<>();
@Override
public void onCreate() {
super.onCreate();
}
public void killApp() {
for(Activity a : ActivityList) a.finish();
}
}
MainActivity.java
public class MainActivity extends Activity {
Activity a;
Common c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
a = this;
c = (Common) getApplication();
c.ActivityList.add(a);
findViewById(R.id.b1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(a, SecondaryActivity.class);
startActivity(i);
}
});
}
}
SecondaryActivity.java
public class SecondaryActivity extends Activity {
Activity a;
Common c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secondary);
a = this;
c = (Common)getApplication();
c.ActivityList.add(a);
findViewById(R.id.b2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
}
このサンプルコードではActivityを起動するたびに、
Application継承オブジェクトであるCommon内のActivityListに追加しています。
そして、アプリを終了させたいときはActivityList内のすべてのActivityをfinishさせます。
まとめ
この記事ではアプリを終了させる方法を紹介しました。少し強引なやり方となってしまいましたが、参考になれば幸いです。
