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


321

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

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

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




'System.exit (0);'을 사용하십시오. 앱을 종료하고 싶을 때 사용자에게 메시지를 표시 한 후 복구 할 수없는 오류로 수행했습니다. 필요한 경우 AlarmManager를 사용하여 앱을 자동으로 다시 시작할 수도 있습니다. 참조 : blog.janjonas.net/2010-12-20/…
누군가 어딘가에

답변:


397

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

this.finishAffinity();

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

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


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

finishAndRemoveTask();

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


28
확실히 이것이 정답입니다! 를 사용하여 앱을 완성하는 것은 좋은 해결책이 아닙니다 System.exit(0);. 답변 주셔서 감사합니다! 마지막으로 적절한 해결책을 찾았습니다.
Antonio

4
API 14에 다른 솔루션이 있는지 알고 있습니까? 감사합니다
Script Kitty

2
앱을 닫거나 액티비티 라이프 사이클 내부에서 각 액티비티를 개별적으로 finish () 할 수 있습니다.
sivi

3
경고! this.finishAffinity ()는 메모리에서 앱을 제거하여 앱을 닫으므로 푸시 메시지가 수신되지 않습니다.
Tincho825

7
이 솔루션은 99 %의 사례에서 작동합니다. 그러나 프로세스를 파괴하지 않으므로 예를 들어 단검이 지워지지 않습니다. 드문 경우이지만 프로세스 종료가 필요한 System.exit(0)유일한 방법은 저에게 효과적이었습니다.
Slav

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

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

나를위한 최고의 솔루션.


예, 잘 작동합니다! MainActivity에서 이것을 호출해야 작동합니다!
mz87

완벽한 솔루션. Android는 메모리 관리에 가장 적합하므로 프로세스를 종료 할 필요가 없습니다. 그러나 이는 사용자 편의를 위해 앱을 종료 할뿐만 아니라 활동을 완료하기위한 솔루션을 제공합니다.
IAmTheSquidward 5

완벽한 솔루션입니다. 많은 문제를 해결했습니다. 감사.
superuserdo

26
나는 이것이 좋은 해결책이라고 생각하지 않습니다. 를 사용하여 프로그램을 완료하지 않아야 합니다 System.exit(0);. 올바른 솔루션은 @sivi에 의해 게시되었습니다 (그 답변이 위에 있음)
Antonio

13
이것은 해결책이 아니며, 활동이 많은 경우 작동하지 않습니다.
user3290180

46

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

3
이것은 정답입니다, 내가 찾고있었습니다. 감사
유목

앱에서 FCM 또는 백그라운드 작업을 사용한 경우 아무런 문제가 없습니까?
roghayeh hosseini '12

이것은 메모리에서 응용 프로그램을 지우는 데 필요한 것입니다
A1m

사용하지 마십시오. System.exit(0);메모리를 비워서는 안됩니다. 필요한 경우 시스템에서 메모리를 사용 합니다. 이것은 의도 된 동작입니다.
crgarridos

30

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

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

finish();

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

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

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

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


30
호출 finish()해도 응용 프로그램이 종료되지 않습니다. finish()모든 시간을 사용 : Call this when your activity is done and should be closed.그것은 "뒤로"버튼을 치는 것과 같은 효과입니다.
Tanner Perrien 2016 년

완료하면 활동이 종료됩니다. 이 점이 어떻게 다른가요?
Nanne

"마무리"또는 "죽이기"를 가진 아무것도 잘못이있다 Activity(안가 Application). 예를 들어, 사용자에게 정보를 표시하기 위해 새 활동을 시작할 수 있습니다. 시간이 초과되거나 '확인'을 누르면 finish()통화 활동으로 돌아갈 수 있습니다 .
Tanner Perrien 2016 년

42
대부분의 Android 애플리케이션에는 둘 이상의 활동이 있습니다.
CommonsWare

4
@Nanne-잠금 화면은 모든 활동을 중지하려는 경우의 예입니다. 뱅킹 앱에 로그인한다고 가정 해보십시오. 사용자와 상호 작용하지 않고 일정 시간이 지나면 잠금 화면이 시작됩니다. 누군가가 잠금 화면에서 뒤로 버튼을 누르면 모든 활동을 중지하고 싶을 것입니다!
Jabari

19

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


2
이 사용 사례에 동의합니다. 또한 특정 위치에서 사용할 수 있어야하고 사용자가 해당 위치에 있지 않은 경우 닫는 것이 가장 좋은 안전한 앱을 고려하십시오. 어떻게해야합니까?
Sydwell

18

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

}

이것은 가장 투표가 많은 답변이지만 해킹입니다. onCreate에서 호출 완료는 대부분은 아니지만 대부분의 장치에서 결함이 있습니다.
DoruChidean

흠하지만 결함은 아닙니다. 먼저 exit ()를 호출하면 명확한 상단과 작업으로 모든 활동의 최상위에 도달 한 다음 자체적으로 완료됩니다. 여기서 나가
vivek

1
이 클래스를 매니페스트에 선언해야합니다. 그러나 영리한 핵에 +1.
Taslim Oseni

이것은 효과가 있었다! 투표
TuanDPH

17

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

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

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

13

우선,이 접근법에는 최소 API 16이 필요합니다.

이 문제를 더 광범위하게 해결하기 위해이 솔루션을 3 개 부분으로 나누겠습니다.

1. 활동 에서 응용 프로그램을 종료 하려면이 코드 스 니펫을 사용하십시오.

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    finishAndRemoveTask();
}

2. 활동에 액세스 할 수 있는 비 활동 클래스 에서 응용 프로그램을 종료하려면 다음 코드 스 니펫을 사용하십시오.

if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
    getActivity().finishAffinity();
} else if(Build.VERSION.SDK_INT>=21){
    getActivity().finishAndRemoveTask();
}

3. 비 활동 클래스에서 응용 프로그램을 종료하고 서비스와 같은 활동에 액세스 할 수없는 경우 BroadcastReceiver를 사용하는 것이 좋습니다. 이 접근 방식을 프로젝트의 모든 활동에 추가 할 수 있습니다.

LocalBroadcastManager 및 BroadcastReceiver 인스턴스 변수를 작성하십시오. 원하는 경우 getPackageName () + ". closeapp"를 바꿀 수 있습니다.

LocalBroadcastManager mLocalBroadcastManager;
BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction().equals(getPackageName()+".closeapp")){
            if(Build.VERSION.SDK_INT>=16 && Build.VERSION.SDK_INT<21){
                finishAffinity();
            } else if(Build.VERSION.SDK_INT>=21){
                finishAndRemoveTask();
            }
        }
    }
};

Activity의 onCreate () 메소드에 추가하십시오.

mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);
IntentFilter mIntentFilter = new IntentFilter();
mIntentFilter.addAction(getPackageName()+".closeapp");
mLocalBroadcastManager.registerReceiver(mBroadcastReceiver, mIntentFilter);

또한 Activity의 onDestroy () 메소드에서 unregister 수신자를 호출하는 것을 잊지 마십시오

mLocalBroadcastManager.unregisterReceiver(mBroadcastReceiver);

응용 프로그램을 종료하려면 서비스를 확장하는 PlayService 클래스에서 사용하는 LocalBroadcastManager를 사용하여 브로드 캐스트를 보내야합니다.

LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(PlayService.this);
localBroadcastManager.sendBroadcast(new Intent(getPackageName() + ".closeapp"));

10

finishAndRemoveTask ()API 21에서 사용할 수 있습니다

공공 무효 finishAndRemoveTask ()

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


8

앱을 얼마나 빨리 닫을 지에 따라 다릅니다.

앱을 닫는 안전한 방법은 finishAffinity ();

모든 프로세스가 처리를 마친 후에 앱을 닫습니다. 시간이 좀 걸릴 수 있습니다. 이 방법으로 앱을 닫고 잠시 후에 다시 시작하면 새 응용 프로그램이 동일한 프로세스에서 실행될 수 있습니다. 이전 응용 프로그램의 모든 완료되지 않은 프로세스와 단일 객체로.

확실하게하려면 앱이 완전히 닫혀 있는지 확인하십시오. System.exit (0);

앱이 즉시 닫힙니다. 그러나 앱에서 열었던 파일이 손상되었거나 공유 환경 설정 편집이 완료되지 않을 수 있습니다. 따라서 이것을 신중하게 사용하십시오.

워치 독을 장시간 실행되는 작업과 함께 사용하면 다른 방법의 영향을 볼 수 있습니다.

new ANRWatchDog(2000).setANRListener(new ANRWatchDog.ANRListener() {
    public void onAppNotResponding(ANRError error) {
        MainActivity.this.finishAffinity();
        System.exit(0);
    }
}).start();
for(int i = 0; i < 10; ++i){
    --i;
}

ANR 대화 상자 등을 표시하지 않고 2 초 후에 앱을 종료합니다. System.exit (0) 을 제거 하고이 코드를 실행하고 앱을 닫은 후 앱을 다시 시작하면 끝없는 루프가 계속 실행되므로 이상한 동작이 발생합니다.


8

당신은 더 나은 사용했다 finish()당신이있는 경우 Activity, 또는 getActivity().finish()당신은에있는 경우 Fragment.

앱을 완전히 종료하려면 다음을 사용하십시오.

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

6

응용 프로그램을 종료하는 쉽고 간단한 방법

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

방금 홈 화면을 가져 오거나 실제로 앱을 종료합니까?
rpattabi

6

우리는 강력하고 간단한 코드를 원합니다. 이 솔루션은 기존 장치 및 최신 장치에서 작동합니다.

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
        getActivity().finishAffinity();
    } else{
        getActivity().finish();
        System.exit( 0 );
    }

5

나는 당신이 찾고있는 것이 이것이라고 생각합니다.

activity.moveTaskToBack(Boolean nonRoot);


5

@MobileMateo와 비슷하지만 Kotlin

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    this.finishAffinity()
} else{
    this.finish()
    System.exit(0)
}

4

이것이 싫은 지 확실하지 않지만 이것이 내가하는 방법입니다 ...

1 단계- 일반적으로 전 세계에 액세스하려는 메소드와 변수가 포함 된 클래스가 있습니다. 이 예에서는 "App"클래스라고합니다. 앱에있는 각 활동에 대해 클래스 내에 정적 활동 변수를 작성하십시오. 그런 다음 "close"라는 정적 메소드를 작성하여 finish()해당 활동 변수 각각이 널이 아닌 경우 각각의 활동 변수 에서 메소드를 실행하십시오 . 주 / 부모 활동이있는 경우 마지막으로 닫으십시오.

public class App
{
    ////////////////////////////////////////////////////////////////
    // INSTANTIATED ACTIVITY VARIABLES
    ////////////////////////////////////////////////////////////////

        public static Activity activity1;
        public static Activity activity2;
        public static Activity activity3;

    ////////////////////////////////////////////////////////////////
    // CLOSE APP METHOD
    ////////////////////////////////////////////////////////////////

        public static void close()
        {
            if (App.activity3 != null) {App.activity3.finish();}
            if (App.activity2 != null) {App.activity2.finish();}
            if (App.activity1 != null) {App.activity1.finish();}
        }
}

2 단계- 각 활동에서 onStart()onDestroy()메소드를 대체하십시오 . 에서 onStart()앱 클래스의 정적 변수 "로 동일하게 설정 this". 에서 onDestroy()로 설정하십시오 null. 예를 들어 "Activity1"클래스에서

@Override
public void onStart()
{
    // RUN SUPER | REGISTER ACTIVITY AS INSTANTIATED IN APP CLASS

        super.onStart();
        App.activity1 = this;
}

@Override
public void onDestroy()
{
    // RUN SUPER | REGISTER ACTIVITY AS NULL IN APP CLASS

        super.onDestroy();
        App.activity1 = null;
}

3 단계- 앱을 닫으려면 App.close()어디서나 전화 하면됩니다. 모든 인스턴스화 된 활동이 종료됩니다! 활동을 닫고 앱 자체를 종료하지 않기 때문에 (예와 같이) Android는 무료로 가져와 필요한 정리를 수행합니다.

다시 말하지만, 이것이 어떤 이유로 든 눈에 띄게 될지 모르겠습니다. 그렇다면 그 이유와 개선 방법에 대한 의견을 읽고 싶습니다.


흥미롭게도, 다른 경험 많은 안드로이드 개발자들이 이것에 대해 생각한 것에 관심이 있습니다.
Rudi Kershaw

4
활동에 대한 참조를 유지하면 실제로 메모리가 누출됩니다! 자세한 내용은 내용을 참조하십시오 .
Managarm

@Managarm이 포스트의 전제는 프로세스 (이 경우 Activity)가 파괴 된 후에도 정적 변수가 유지된다는 것입니다. 그래도 적절한 집 청소가 수행되면 문제가되지 않으므로 활동의 onDestroy () 메소드에서 참조를 무효화하는 이유입니다.
Jabari

@ Jabiah 아, 나는 onDestroy 부분을 놓쳤다. 이 경우 모범 사례는 아니지만 문제가되지 않아야합니다.
Managarm

1
아무런 문제없이 일했습니다. 를 위해 api>=16사용하는 finishAffinity()다른 사람이 방법을 사용합니다.
Mr. Nobody

4

응용 프로그램을 종료하는 것은 눈살을 찌푸리고 있습니까? . 이 링크를 통해 이동하십시오. 귀하의 질문에 답변합니다. 시스템은 응용 프로그램을 종료하는 작업을 수행합니다.

두 개의 활동 A a B가 있다고 가정합니다. A에서 B로 이동합니다. 뒤로 단추를 클릭하면 활동 B가 백 스택에서 팝되어 파괴됩니다. 백 스택 활동 A의 이전 활동이 초점을 갖습니다.

애플리케이션 종료시기를 결정하려면 시스템에 그대로 두어야합니다.

공공 무효 finish()

활동이 끝났을 때 전화하십시오.

많은 활동이 있다고 가정하십시오. 작업 표시 줄을 사용할 수 있습니다. 홈 아이콘을 클릭하면 응용 프로그램의 MainActivity로 이동합니다. MainActivity에서 뒤로 단추를 클릭하여 응용 프로그램을 종료하십시오.


3

응용 프로그램을 종료하려면 다음을 사용할 수 있습니다.

getActivity().finish();
Process.killProcess(Process.myPid());
System.exit(1);

또한 서비스를 중지하려면 다음 메소드를 호출하십시오.

private void stopServices() {        
    final ActivityManager activityManager = SystemServices.getActivityManager(context);
    final List<ActivityManager.RunningServiceInfo> runningServices = activityManager.getRunningServices(Integer.MAX_VALUE);
    final int pid = Process.myPid();
    for (ActivityManager.RunningServiceInfo serviceInfo : runningServices) {
        if (serviceInfo.pid == pid && !SenderService.class.getName().equals(serviceInfo.service.getClassName())) {
            try {
                final Intent intent = new Intent();
                intent.setComponent(serviceInfo.service);
                context.stopService(intent);
            } catch (SecurityException e) { 
                 // handle exception
            }
        }
    }
}

2

이것은 매우 늦을 수 있으며 지침에 따라 수명주기 프로세스를 스스로 처리하지 않아야합니다 (OS가 당신을 위해하는 것처럼). 모든 활동에 브로드 캐스트 리시버를 " finish()"로 등록하고 onReceive() 종료 할 때마다 모든 활동을 종료해야한다는 의도를 간단히 전달할 수 있습니다 ..... onDestroy()메소드 에서 수신자를 등록 취소하십시오 .


1

좋은 결정이 아니므로 Android의 응용 프로그램 처리 원칙에 위배됩니다. 안드로이드는 절대 불가피한 경우가 아니면 프로세스를 종료하지 않습니다. 이렇게하면 앱이 더 빨리 시작하여 항상 메모리에 유지됩니다. 따라서 애플리케이션 프로세스를 종료 할 특별한 이유가 필요합니다.


4
애플리케이션에서 로그 아웃하려면 앱을 실제로 종료해야합니다. 따라서
로그

1

버튼 클릭시 앱 을 종료 하는 정확하고 정확한 해결책 은 아래 코드를 사용하는 것입니다.

// On 버튼 뒤로 눌린 이벤트

public void onBackPressed()
{ 
   moveTaskToBack(true);
   finish();
}

이것은 전체 앱이 아닌 현재 Android 구성 요소 (예 : 활동) 입니다.
Laogeodritt

이것은 백그라운드에서만 앱을 보낼 것입니다
Kumar Gaurav

1

Kotlin을 사용하는 경우 앱을 종료하는 적절한 방법 System.exit()은 내장 방법입니다.

exitProcess(0)

설명서를 참조하십시오 .

0매개 변수로서의 숫자 는 종료가 의도되었으며 오류가 발생하지 않았 음을 의미합니다.


0

이것은 아무것도 죽일 것이다;)

int p = android.os.Process.myPid();
android.os.Process.killProcess(p);


0

Android의 논리를 손상시키지 않고 기존 활동에 더 많은 코드를 추가하지 않고 추가 사항을 전달하지 않고 활동에서 응용 프로그램을 종료하는 가장 쉬운 방법은 다음과 같습니다.

public static void quitApplication (Activity currentActivity) {
    Intent intent = new Intent (currentActivity, QuitApplicationActivity.class);
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);

    currentActivity.startActivity (intent);
    currentActivity.finish ();
}

QuitApplicationActivity존재 :

public class QuitApplicationActivity extends AppCompatActivity {

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

        finish ();
    }
}

0

@Sivi의 답변으로 앱이 닫힙니다. 그러나 돌아 왔을 때, 일부 어린이 활동이있는 경우, 완료되지 않은 다른 활동이 열릴 수 있습니다. noHistory:true반품시 앱이 MainActivity에서 시작되도록 활동에 추가 했습니다.

<activity 
      android:name=".MainActivity"
      android:noHistory="true">
</activity>

0

앱을 종료하는 잔인한 방법 목록에 하나를 추가하기 만하면됩니다.

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


Process.killProcess(Process.myPid())동일하지만 짧습니다
ivan8m8

-1

전체 앱을 종료 할 수 있습니다. 그러므로

Intent intent = getBaseContext().getPackageManager()
             .getLaunchIntentForPackage(getBaseContext().getPackageName());
intent .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

100 % 작동합니다. 행운을 빌어 요!


1
이 질문에 대한 답은 아닙니다!
Al-Mothafar

-4

뒤로 키를 누르면 finish ()를 사용하십시오.


4
finish ()는 활동을 닫을 것이지만 확실하게 전체 앱을 닫지는 않습니다.
2Dee September
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.