프로그래밍 방식으로 안드로이드 응용 프로그램을 종료하는 방법

프로그래밍 방식으로 Android 응용 프로그램을 종료하기위한 코드를 찾았습니다. onDestroy ()에서 다음 코드 중 하나를 호출하면 응용 프로그램이 완전히 종료됩니까?

  1. System.runFinalizersOnExit(true)
    (또는)
  2. android.os.Process.killProcess(android.os.Process.myPid());

종료 버튼을 클릭 한 후 백그라운드에서 응용 프로그램을 실행하고 싶지 않습니다. Pls는이 코드 중 하나를 사용하여 응용 프로그램을 종료 할 수 있다고 제안합니까? 그렇다면 어떤 코드를 사용할 수 있습니까? Android에서 앱을 종료하는 좋은 방법입니까?



답변

API 16부터 finishAffinity 메소드를 사용할 수 있습니다. finishAffinity 메소드는 이름과 Javadoc 설명으로 모든 관련 활동을 닫는 것과 매우 비슷합니다.

this.finishAffinity();

현재 작업에서 동일한 선호도를 가진 바로 아래의 모든 활동뿐만 아니라이 활동을 완료하십시오. 일반적으로 응용 프로그램을 다른 작업 (예 : 이해하는 콘텐츠 유형의 ACTION_VIEW에서)으로 시작할 수 있고 사용자가 위로 탐색을 사용하여 현재 작업에서 자체 작업으로 전환 한 경우에 사용됩니다. 이 경우 사용자가 두 번째 응용 프로그램의 다른 활동으로 이동 한 경우 모든 작업을 작업 스위치의 일부로 원래 작업에서 제거해야합니다.

이 마무리를 통해 이전 활동에 결과를 전달할 수 없으며 그렇게하려고하면 예외가 발생합니다.

API 21 부터 매우 유사한 명령을 사용할 수 있습니다

finishAndRemoveTask();

이 작업의 모든 활동을 완료하고 최근 작업 목록에서 제거합니다.


답변

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

이것이 앱을 종료하는 가장 좋은 방법입니다. !!!

나를위한 최고의 솔루션.


답변

finishAffinity();

System.exit(0);

응용 프로그램 finishAffinity();없이 사용 System.exit(0);하지만 응용 프로그램은 종료되지만 할당 된 메모리는 여전히 휴대 전화에서 사용 중이므로 깨끗하고 실제로 응용 프로그램을 종료하려면 두 가지를 모두 사용하십시오.

이것은 가장 간단한 방법이며 어디에서나 작동하며, 실제 앱을 종료하고, 많은 활동을 열면 여전히 문제없이 종료됩니다.

버튼 클릭 예

public void exitAppCLICK (View view) {

    finishAffinity();
    System.exit(0);

}

또는 예를 들어 3 개의 버튼이있는 경고 대화 상자를 사용하여 예를 들어 취소하고 취소하는 것이 좋습니다.

// alertdialog for exit the app
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);

// set the title of the Alert Dialog
alertDialogBuilder.setTitle("your title");

// set dialog message
alertDialogBuilder
        .setMessage("your message")
        .setCancelable(false)
        .setPositiveButton("YES"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // what to do if YES is tapped
                        finishAffinity();
                        System.exit(0);
                    }
                })

        .setNeutralButton("CANCEL"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on CANCEL tapped
                        dialog.cancel();
                    }
                })

        .setNegativeButton("NO"),
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog,
                                        int id) {
                        // code to do on NO tapped
                        dialog.cancel();
                    }
                });

AlertDialog alertDialog = alertDialogBuilder.create();

alertDialog.show();

답변

응용 프로그램을 종료해야하는 경우에 대해 정말 열심히 생각하십시오. OS에서 리소스를 언제 어디서 언제 해제 할 수있게합니까?

그렇지 않으면 정말 확실하다면

finish();

우선은 큰 질문 / 답변 콤보 @gabriel 게시 읽기 : @ 데이브 애플 턴의 의견에 대한 반응으로 눈살을 찌푸리게하는 응용 프로그램을 종료되어 있습니까?

이제 우리가 그것을 가지고 있다고 가정 할 때, 여기에 질문에 대한 답이 finish()있습니다. 종료로 무언가를 할 때 필요한 코드는 입니다. 분명히 당신은 하나 이상의 활동 등을 가질 수 있지만, 요점이 아닙니다. 일부 유스 케이스로 실행할 수 있습니다.

  1. 메모리 사용과 “백그라운드에서 실행되지 않음”으로 인해 사용자가 모든 것을 종료하도록하려고합니다. 의심 할 여지가 없습니다. 사용자가 백그라운드에서 특정 활동을 중지하게하면서 OS가 불필요한 원치 않는 명령을 종료하도록합니다.
  2. 사용자가 앱의 이전 활동으로 이동하지 않기를 원하십니까? 필요하지 않도록 구성하거나 추가 옵션이 필요합니다. 대부분의 경우 back = previous-activity가 작동하는 경우 사용자가 다른 작업을 수행하려는 경우 집으로 돌아 가지 않습니까?
  3. 어떤 종류의 재설정이 필요한 경우 응용 프로그램이 종료되었는지 여부 / 방법 / 등을 확인할 수 있으며 활동에 다시 초점이 맞으면 조치를 취할 수 있습니다.

결국 결국 finish()모든 것을 죽이지 않지만 여전히 내가 생각하는 도구입니다. “모든 활동 종료”에 대한 사용 사례가 있다면 아직 찾지 못했습니다.


답변

어떤 경우에는 응용 프로그램을 종료해야한다고 생각합니다. 예를 들어, 로그인 후에 만 ​​앱을 사용할 수 있습니다. 로그인 활동에는 ‘로그인’과 ‘취소’의 두 가지 버튼이 있습니다. ‘취소’버튼을 클릭하면 ‘앱 종료’를 의미합니다. 아무도 백그라운드에서 앱을 살아있는 것을 원하지 않습니다. 따라서 일부 경우 앱을 종료해야한다는 데 동의합니다.


답변

ExitActivity만들고 매니페스트에 선언하십시오. 그리고 ExitActivity.exit(context)앱 종료를 요청하십시오 .

public class ExitActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        finish();
    }

    public static void exit(Context context) {
        Intent intent = new Intent(context, ExitActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        context.startActivity(intent);
    }

}

답변

android에는 응용 프로그램이 종료되지 않습니다 . SampleActivity.this.finish (); 현재 활동을 완료합니다.

한 활동에서 다른 활동으로 전환 할 때 이전 활동을 완료하십시오.

Intent homeintent = new Intent(SampleActivity.this,SecondActivity.class);
startActivity(homeintent);
SampleActivity.this.finish();