アプリケーションのヘッダーに戻る矢印の付いたImageButtonがあります。ユーザーがそれを押すと、現在のアクティビティでfinish()を呼び出します。ユーザーが帰宅するオプションもありますが、どういうわけかアクティビティ履歴をクリアしたいので、ユーザーがホームアクティビティの戻るボタンを押すと、アプリケーションが閉じます。
ホームアクティビティを呼び出すときに、インテントにパラメータを設定することもできますが、アプリケーションを閉じるために何を呼び出すのですか?
アプリケーションのヘッダーに戻る矢印の付いたImageButtonがあります。ユーザーがそれを押すと、現在のアクティビティでfinish()を呼び出します。ユーザーが帰宅するオプションもありますが、どういうわけかアクティビティ履歴をクリアしたいので、ユーザーがホームアクティビティの戻るボタンを押すと、アプリケーションが閉じます。
ホームアクティビティを呼び出すときに、インテントにパラメータを設定することもできますが、アプリケーションを閉じるために何を呼び出すのですか?
インテントフラグFLAG_ACTIVITY_CLEAR_TOPは目的に適しています。
履歴なしでアクティビティを開始する例:
Intent intent = new Intent(this,ExampleActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
アクティビティに移動するときは、そのactivityContextをどこかに保存します(たとえば、コンテキストの配列内)。
終了ボタンを押すと、配列をループして次のように言うことができますactivity.finish()
これで、スタック内のすべてのアクティビティが終了し、ユーザーはアプリを使用できなくなります。
コードは次のようになります。
public class ActivityStack {
public ArrayList<Context> contextArray=new ArrayList<>();
public void setContext(int i,Context context) {
contextArray.add(context);
}
public void quitApp() {
for(context:ContextArray) {
context.finish();
}
}
}
編集:API 16から、finishAffinity()
メソッドを使用してすべてのアクティビティを終了できます。
startIntentForResult()を使用してアクティビティを呼び出す必要があります。次に、2番目のアクティビティで、次のようなことを行います。
setResult(RESULT_OK);
finish();
そして、最初のアクティビティで、このコードを取得し、そのアクティビティも閉じます。
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
if (getParent() == null) {
setResult(Activity.RESULT_OK, null);
}
else {
getParent().setResult(Activity.RESULT_OK, null);
}
finish();
}
}
この関数を使用できます:
//to remove application from task manager
public void onQuitPressed() {
int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);
}
最後のアクティビティを閉じるときは、アプリが閉じていると見なしてください。アプリのライフサイクルは、開発者としての責任を超えており、フレームワークによって処理されます。すべてのアクティビティが終了すると、アクティビティスタック(履歴)は空になるため、次のアプリの起動により、最初にonCreateを呼び出す最初のアクティビティが開始されます。
シングルトンやその他の静的フィールドは保持されますが、より多くのメモリが必要になるため、Androidはそれらをクリアするため、問題はありません。
詳細については、このスレッドを参照することもお勧めします。
このようなことをしてください。
サービスを手動で閉じる
@Override
public void onBackPressed() {
Intent intent = new Intent(NewFox_Project.this,RadioService.class);
moveTaskToBack(true);
stopService(intent);
Intent radioTimes = new Intent(NewFox_Project.this,RadioTimeService.class);
moveTaskToBack(true);
stopService(radioTimes);
Intent radioPlyerService = new Intent(NewFox_Project.this,RadioPlayerService.class);
moveTaskToBack(true);
stopService(radioPlyerService);
NewFox_Project.this.finish();
super.onBackPressed();
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getKeyCode()==KeyEvent.KEYCODE_BACK)
{
Intent intent = new Intent(NewFox_Project.this,RadioService.class);
moveTaskToBack(true);
stopService(intent);
Intent radioTimes = new Intent(NewFox_Project.this,RadioTimeService.class);
moveTaskToBack(true);
stopService(radioTimes);
Intent radioPlyerService = new Intent(NewFox_Project.this,RadioPlayerService.class);
moveTaskToBack(true);
stopService(radioPlyerService);
NewFox_Project.this.finish();
}
return super.onKeyDown(keyCode, event);
}