Android onCreateOptionsMenu
にログアウトオプションを含むアプリケーションを作成しました。ログアウトは完全に機能しますが、戻るボタンをもう一度押すと、前のアクティビティに移動し、ログイン画面にリダイレクトするnull値。ログイン画面が何度も表示されます。戻るボタンを押したときにアプリを完全に閉じたいのですが、方法がわかりません。
ログイン画面で戻るボタンを押すためのコードは次のとおりです。
@Override
public void onBackPressed() {
new AlertDialog.Builder(this)
.setTitle("BidNEMO")
.setMessage("Are you sure you want to exit?")
.setNegativeButton(Android.R.string.no, null)
.setPositiveButton(Android.R.string.yes, new OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
Main.super.onBackPressed();
finish();
}
}).create().show();
}
みんな助けてください。
Quit Application
ボタンをクリックすると、次のコードが使用されます。
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);
それを試してみてください..
アプリ全体をkillしてRunning
appリストから削除するには、pid
(its nasty)を使用してアプリをkillします...上記のコードの前にこの行を使用します。
int pid = Android.os.Process.myPid();
Android.os.Process.killProcess(pid);
アプリケーションを完全に閉じる場合は、finishAffinity();
ではなくfinish()
を使用する必要があります。これは、アプリケーションによって以前に開かれたアクティビティのすべてのスタックをクリアします。
Xamarinユーザーの場合:
_int pid = Android.OS.Process.MyPid();
Android.OS.Process.KillProcess(pid);
_
OnDestroy()
関数に入れます。
編集:
徹底的に調査したところ、私が書いた上記のコードでさえ、アプリを完全に「強制終了」しないことがわかりました(タスクマネージャーから「最近のアプリ」を削除)。結局、コードを何度も試してみて、なんとかして、「Finish」関数を次のコードでオーバーライドすることに成功しました。
_public override void Finish()
{
if (Android.OS.Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
{
base.FinishAndRemoveTask();
}
else
{
base.Finish();
}
}
_
これがその質問に対する唯一の解決策です!
アクティビティを終了するには、次のコードを使用しています。
public void appExit () {
this.finish();
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
} //close method
または、次のコードでProcessを終了します。
int pid = Android.os.Process.myPid();
Android.os.Process.killProcess(pid);
それが大丈夫に見えても、殺害プロセスは将来あなたに頭痛を引き起こすでしょう。これは、次の使用例で確認できます。
[〜#〜]観察された[〜#〜]:アプリケーションは、メインアクティビティからではなく、一貫性のない方法で開きます。これはAndroidクラッシュのようなプロセスの強制終了を検討するためです。
あなたはここでより詳細な情報を見つけることができます: アプリケーションの終了は眉をひそめていますか?
Android.os.Process.killProcess(Android.os.Process.myUid());
これがいいと思います。それはどうですか?