_Act1
_、_Act2
_、_Act3
_、_Act4
_の4つのアクティビティがあります。 Act1のボタンはAct2を開き、Act2のボタンはAct3を開き、Act3のボタンはAct4を開きます。
私は2つのことをしたいです:
Act4には、ユーザーをAct1に誘導するボタンがあります。問題は、ユーザーがAct1に戻ってクリックしたときに、Act4を開く代わりにアプリを閉じることです。
ユーザーが選択したときにすべてのアクティビティのメニュー「終了」のオプションがあります。前のアクティビティに戻るのではなく、アプリを閉じます。
finish();
を使用してみましたが、私の要件を満たしていませんでした。
_Act4
_ 'th _Menu.xml
_の終了ボタンで以下のコードを使用します-
_Intent intent = new Intent(Act4.this, Act1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
_
そして、あなたの最初のアクティビティのonCreate()
メソッドに以下のコードを置くだけです-
_if (getIntent().getBooleanExtra("EXIT", false))
{
finish();
}
_
これでアプリが終了します。
このリンクをチェックしてください:
以下を使用できます。
@Override
public void onBackPressed()
{
moveTaskToBack(true);
}
すべてのアクティビティでアプリを閉じます。
Intent intent = new Intent(Act4.this, Act1.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
前のアクティビティに戻る前にフラグをクリアします。それはあなたを助けるかもしれません。
次のアクティビティに移動したときに前のアクティビティを終了するには、finish();
の後にstartactivity(intent);
を記述し、4番目のアクティビティのボタンクリックイベントから最初のアクティビティを開始するコードを記述します。
Intent in1=new Intent(Act4.this, Act1.class);
startActivity(in1);
finish();
また、すべてのアクティビティでExitボタンのClickイベントに以下のコードを記述します。
finish();
このコードをアプリに配置します。
moveTaskToBack(true);
Android.os.Process.killProcess(Process.myPid());
System.exit(1);
使用する Android:noHistory = "true"
AndroidManifest.xmlファイル内
<activity
Android:name=".Act1"
Android:noHistory="true" />
<activity
Android:name=".Act2"
Android:noHistory="true" />
<activity
Android:name=".Act3"
Android:noHistory="true" />
<activity
Android:name=".Act4"
Android:noHistory="true" />
私はこの方法を使用します:
1。残りのアクティビティを閉じる最初のアクティビティで静的アクティビティを作成します。
2。次に、このような静的メソッドで呼び出すと、どこからでもアプリを閉じます。
public static Activity activity;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity=this;
}
public static void CloseApp(){
activity.finish();
}
Do a
<code>
try
{
finalize();
finish
}
catch(Exception error)
{
error.printStackTrace();
}
//This would exit your App neatly
</code>
私が使用するアプローチは、すべての子アクティビティをstartActivityForResult
で開始することです。次に、子の終了時にputExtra( "STATE"、some_value)を配置し、状態値を使用して親を介して何をするかを決定できます。
深い子からアプリを終了する場合、「STATE」は「exit」になり、階層内の各子は単に「exit」のStringExtraを取得し、putExtra(「STATE」、「exit」)を実行して呼び出します。 finish()そして、アプリは最後にfinish()を呼び出します。これを使用して、必要な状態を実現できます。
この方法でstartActivityForResultを使用してメッセージを渡すと、厄介な参照を子アクティビティに渡す必要がなくなり、アプリの目的の状態を設定するアプローチが簡単になります。
(アプリケーションアクティビティスタック内に)別のアクティビティがある場合は、finish()
を使用して現在のアクティビティを終了できます。
ただし、back関数は、アプリケーションアクティビティスタックから現在のアクティビティを削除することも想定しています。
私の経験では、バックスタック(アプリケーションアクティビティスタック)のアクティビティに依存することは非常に信頼できません。そのため、私は深くなると各アクティビティを終了していました。
あなたの場合:
Act 1 -> exit -> Act 2 -> exit -> Act 3 -> exit -> Act 4 -> exit -> Act 1 -> exit
上記のメソッドは、すべてのアクティビティを終了します。
ただし、バックグラウンドでコードを実行する場合は、「アクティビティ」ではなく「サービス」に依存することをお勧めします。割り当てられた作業を行った後、「サービス」を終了させることができます。