web-dev-qa-db-ja.com

Androidアプリを完全に閉じる方法

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();
     }

みんな助けてください。

17
Brett

Quit Applicationボタンをクリックすると、次のコードが使用されます。

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
startActivity(intent);

それを試してみてください..

アプリ全体をkillしてRunningappリストから削除するには、pid(its nasty)を使用してアプリをkillします...上記のコードの前にこの行を使用します。

int pid = Android.os.Process.myPid();
Android.os.Process.killProcess(pid);
56
ryderz8

アプリケーションを完全に閉じる場合は、finishAffinity();ではなくfinish()を使用する必要があります。これは、アプリケーションによって以前に開かれたアクティビティのすべてのスタックをクリアします。

15
SachiN Ware.

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();
        }
    }
_

これがその質問に対する唯一の解決策です!

6
Roy Doron

API 21以降

finishAndRemoveTask()

これを呼び出して、アプリを完全に閉じることができます。すべてのアクティビティがfinish()になり、アプリがタスクリストから削除されます。

6
Mick Ashton

アクティビティを終了するには、次のコードを使用しています。

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);
5
chiru

それが大丈夫に見えても、殺害プロセスは将来あなたに頭痛を引き起こすでしょう。これは、次の使用例で確認できます。

  1. いくつかのアクティビティを呼び出して、アクティビティスタックを作成します
  2. android.os.Process.killProcess(pid);を呼び出します。
  3. アプリケーションを開く

[〜#〜]観察された[〜#〜]:アプリケーションは、メインアクティビティからではなく、一貫性のない方法で開きます。これはAndroidクラッシュのようなプロセスの強制終了を検討するためです。

あなたはここでより詳細な情報を見つけることができます: アプリケーションの終了は眉をひそめていますか?

0
Pavel Polushkin
Android.os.Process.killProcess(Android.os.Process.myUid());

これがいいと思います。それはどうですか?

0
AlienKilleR