web-dev-qa-db-ja.com

プログラムでAndroidアプリを終了する方法は?

いくつか読んだので、この質問は何度も聞かれたと思います。私のクライアントは、ユーザーがクリックして終了できるアプリにボタンを配置することを望んでいます。 this を読んで、finish()を呼び出すとそれができることがわかりました。しかし、フィニッシュは現在実行中のアクティビティを閉じるだけですよね?たくさんのアクティビティがあるので、この場合は、すべてのアクティビティのインスタンスを渡して終了するか、すべてのアクティビティをシングルトンパターンにする必要があります。

また、Activity.moveTaskToBack(true)でホーム画面に移動できることも知りました。 OK、これは閉じていませんが、プロセスをバックグラウンド化しています。これは効果的ですか?

アプリを完全に閉じるには、どの方法を使用する必要がありますか?上記のいずれか、または他の方法/上記の方法の他の使用法はありますか?

61
PeakGen

実際には、アクティビティが発生する可能性のある場所で、onclickイベントでアプリケーションを閉じることを求めています。

みんな友達がこのコードを試してみます。このコードをonclickイベントに配置します

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent); 
56
Fayaz

System.exit()を呼び出すことができます。すべての活動から抜け出すために。

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
Android.os.Process.killProcess(Android.os.Process.myPid());
                    System.exit(1);

                }
            });
40
Anchit Mittal

アプリケーションを終了する場合は、ボタン押下イベント内で次のコードを使用します。

public void onBackPressed() {
  moveTaskToBack(true);
  Android.os.Process.killProcess(Android.os.Process.myPid());
  System.exit(1);
}
31
Pir Fahim Shah
 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                Android.os.Process.killProcess(Android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }
20
Aditya_Android

簡単すぎる。 System.exit(0);を使用します

17
Amon Olimov

API 16以降、finishAffinityメソッドを使用できます。このメソッドは、名前とjavadocの説明によって、関連するすべてのアクティビティを閉じることに近いと思われます。

this.finishAffinity();

このアクティビティと、同じアフィニティを持つ現在のタスクのすぐ下にあるすべてのアクティビティを終了します。これは通常、アプリケーションが別のタスク(理解しているコンテンツタイプのACTION_VIEWなど)で起動でき、ユーザーがアップナビゲーションを使用して現在のタスクから独自のタスクに切り替えたときに使用されます。この場合、ユーザーが2番目のアプリケーションの他のアクティビティに移動した場合、それらすべてをタスクスイッチの一部として元のタスクから削除する必要があります。

この終了では、前のアクティビティに結果を配信することはできず、実行しようとすると例外がスローされることに注意してください。


Api 21 なので、非常によく似たコマンドを使用できます

finishAndRemoveTask();

このタスクのすべてのアクティビティを終了し、最近のタスクリストから削除します。

代替案:

getActivity().finish();
System.exit(0);


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


Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);


Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

ソース: プログラムでAndroidアプリケーションを終了する方法


それが役に立てば幸い!がんばろう!

12

実際には、次の2つの状況が考えられます。

  1. アクティビティを終了することもできます
  2. または、アプリケーションを終了します

次のコードを使用してアクティビティを終了できます。

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

ただし、これにより、同じアプリケーション内の基礎となるアクティビティは強制終了されません。これにより、アプリケーションが最小化されます。

アプリケーションを終了する場合は、次のコードを使用してプロセスを終了します。

Android.os.Process.killProcess(Android.os.Process.myPid()); 

モノの開発のためだけに使用します

process.KillProcess(Process.MyPid());
12
Kasun
Android.os.Process.killProcess(Android.os.Process.myPid());
5
kathir

this.finishAffinity()はどうですか

ドキュメントから、

このアクティビティと、同じアフィニティを持つ現在のタスクのすぐ下にあるすべてのアクティビティを終了します。これは通常、アプリケーションが別のタスク(理解しているコンテンツタイプのACTION_VIEWなど)で起動でき、ユーザーがアップナビゲーションを使用して現在のタスクから独自のタスクに切り替えたときに使用されます。この場合、ユーザーが2番目のアプリケーションの他のアクティビティに移動した場合、タスクスイッチの一部としてそれらすべてを元のタスクから削除する必要があります。この終了では、前のアクティビティに結果を配信することはできず、実行しようとすると例外がスローされることに注意してください。

5
Akeshwar Jha

This.finishAffinity();を使用します。 finish()の代わりにそのボタンに;動作しない場合は、Android:noHistory = "true"をマニフェストに追加してから、uisng finish()でアクティビティを終了することもできます。またはfinishAffinity();

それが役に立てば幸い....:)

3
Yesha Shah
 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }
3
azeem khan

コールでこれを試してください。ボタンのonClickで時々使用します。

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

アプリを閉じる代わりに、ダッシュボードを開くので、アプリが閉じているように見えます。

より明確にするためにこの質問を読んでください Android-終了アプリケーションコード

2

Xamarin.Androidでの達成:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }
2
GONeale

これにより、タスク(アクティビティのスタック)がクリアされ、新しいタスクが開始されます

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);
2
Mahmood Ali

これをonClickに入れてください:

moveTaskToBack(true);
    finish()
2
Stan Malcolm

それでも誰かが疑問に思うなら、Xamarin.Android(私の場合はMonogameで実行されている)では、ActivityのコマンドFinishAndRemoveTask()が非常にうまく機能します!

1
Konrad

moveTaskToBack(true);のみを使用して動作します

1
user3856297

onCreateでsingletopとfinish()で呼び出されるゴーストアクティビティは、トリックを行う必要があります

1
JesusS

System.exit(1)の代わりにSystem.exit(0)を使用します

0
Kaze Tdr

Finishとexitの両方を使用すると、アプリは完全に閉じます

finish();

System.exit(0);

0

バックプレスでコードを使用するだけです

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);
0
Sayooj

アプリケーションで EventBus (または実際には他のpub/subライブラリ)を使用してアクティビティ間で通信している場合、明示的なイベントを送信できます。

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

この唯一の欠点は、すべてのアクティビティがこのイベントをリッスンして、独自のfinish()を呼び出す必要があることです。このため、継承を介してshimアクティビティクラスを簡単に作成し、このイベントをリッスンし、サブクラスに他のすべてを実装させ、すべてのアクティビティが継承することを確認できますこの余分なレイヤー。キルリスナーは、特定の特定の状況での死亡を回避するなど、オーバーライドを通じていくつかの追加機能を追加することもできます。

フラグメント内

getActivity()。finishAndRemoveTask();

アクティビティで

finishAndRemoveTask();

0
Just call these two Function

 finish();
 moveTaskToBack(true);
0
younes

このコードを追加してください:-

@Override
    public void onBackPressed() {
        finish();
        super.onBackPressed();
    }
0
Sandeep Malik

アプリケーションを終了する場合は、次の2行を実行します。

Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
0
Hassnain Jamil