programing

모든 이전 액티비티 완료

projobs 2022. 10. 11. 22:01
반응형

모든 이전 액티비티 완료

응용 프로그램에는 다음과 같은 흐름 화면이 있습니다.

Home->screen 1->screen 2->screen 3->screen 4->screen 5

되었습니다.log out

)Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5

버튼에서든)을 .Log in

FLAG_ACTIVITY을 사용하다스택 오버플로우에서도 몇 가지 답변을 확인하지만 문제를 해결할 수 없습니다. 1 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★FLAG_ACTIVITY_CLEAR_TASK

그 문제를 해결할 방법이 있나요?

용도:

Intent intent = new Intent(getApplicationContext(), Home.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

이렇게 하면 집 위의 모든 활동이 지워집니다.

사용자가 로그인하여 홈을 만들고 그 위에 1 ~5 의 모든 화면이 생성되었을 때 로그인 화면을 종료하고 있다고 가정합니다.제가 올린 코드는 다른 모든 작업을 마치고 홈 화면으로 돌아갑니다.의도를 추가하고 홈 스크린 액티비티에서 그것을 읽고 종료할 수도 있습니다(로그인 화면을 다시 기동할 수도 있습니다).

잘 모르겠습니다만, 이 플래그를 사용하여 로그인을 시도해 볼 수도 있습니다.그 경우 어떻게 순서가 정해질지 모르겠습니다.따라서 현재 사용 중인 화면을 포함하여 현재 사용 중인 화면 아래에 있는 항목이 지워질지 모르겠지만, 이것이 바로 사용 방법입니다.

해 보세요.Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK이전 액티비티를 모두 클리어하고 새로운 액티비티를 시작합니다.

새로운 액티비티를 기동하기 전에, 다음의 코드를 추가해 주세요.

finishAffinity();

이전 버전의 Android에서 작동하기를 원하는 경우:

ActivityCompat.finishAffinity(this);

열려 있는 액티비티를 모두 종료하려면 응용 프로그램 시작 시 실행되는 첫 번째 액티비티를 로드하는 버튼을 누르고 다른 액티비티를 모두 클리어한 후 마지막 액티비티를 종료해야 합니다.사용자가 종료 버튼을 누르면 다음 코드가 실행됩니다.저 같은 경우에는LoginActivity프로그램을 실행하는 첫 번째 활동입니다.

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);

는 을(를) 한 모든 활동을 지우다.LoginActivity 이 안에 LoginActivity의 »onCreate(...)를 위해LoginActivity'가 재생성되고'EX'가 재생성됩니다.IT'입니다.

if (getIntent().getBooleanExtra("EXIT", false)) {
    finish();  
}

안드로이드의 종료 버튼을 만드는 것이 왜 이렇게 어려운가요?

Android는 사용자가 사용하는 프로그램이 백그라운드에서 실행되는지 여부에 대해 신경 쓰지 않기를 바라기 때문에 앱에 "종료" 버튼이 있는 것을 막으려고 노력합니다.

Android OS 개발자들은 당신의 프로그램이 예상치 못한 종료와 전화기의 전원을 끄더라도 살아남을 수 있기를 바라고 있으며, 사용자가 프로그램을 재시작하면, 그들은 프로그램을 중단했던 곳부터 바로 다시 시작할 수 있게 되기를 바라고 있다.따라서 사용자는 응용 프로그램을 사용하는 동안 전화를 받고 맵을 열 수 있습니다.이 맵에서는 응용 프로그램을 해방하여 더 많은 리소스를 확보해야 합니다.

사용자가 프로그램을 재개하면 중단 없이 중단했던 부분부터 다시 시작할 수 있습니다.이 종료 버튼은 작업 관리자의 전원을 차단하여 자동으로 관리되는 Android 프로그램 수명 주기에 문제가 발생할 수 있습니다.

늦은 것 같은데 답이 간단하고 짧아요.액티비티에는 현재 액티비티와 모든 부모 액티비티를 종료하는 finishAffinity() 메서드가 있지만 Android 4.1 이상에서만 작동합니다.

API 16+의 경우,

finishAffinity();

16 미만인 경우,

ActivityCompat.finishAffinity(YourActivity.this);

도움이 됐으면 좋겠다!

Intent intent = new Intent(this, classObject);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」서 ★★★★★IntentCompat안드로이드 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」

액티비티에는 다음을 사용합니다.

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);

삭제_프래그먼트 사용 태스크플래그

나는 이것이 몇몇 사람들에게 사용되기를 바란다.

말하자면, ' 다행이다.
이 답변은 유효합니다(https://stackoverflow.com/a/13468685/7034327)

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
this.finish();

하지만 이것은 효과가 없다

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

.setFlags() 이전 플래그를 대체하고 새로운 플래그를 추가하지 않습니다..addFlags()

그래서 이것도 잘 될 거야.

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

developer.android.com 에서 :

public void finishAffinity ()

API 레벨 16에 추가

이 액티비티와 그 바로 아래의 모든 액티비티를 현재 태스크에서 동일한 선호도를 가진 액티비티를 완료합니다.이것은 일반적으로 응용 프로그램을 다른 작업(예를 들어 인식되는 콘텐츠유형의 ACTION_VIEW에서)으로 기동할 수 있고 사용자가 업 네비게이션으로 현재 작업을 종료하고 자신의 작업으로 전환했을 때 사용됩니다.이 경우 사용자가 두 번째 응용 프로그램의 다른 액티비티로 이동한 경우 작업 전환의 일부로 이러한 액티비티를 모두 원래 작업에서 제거해야 합니다.

이 종료에서는 이전 액티비티로 결과를 전달할 수 없습니다.이렇게 할 경우 예외가 발생합니다.

애플리케이션에 최소 sdk 버전 16이 있는 경우 finishAffinity()사용할 수 있습니다.

이 액티비티와 그 바로 아래의 모든 액티비티를 현재 태스크에서 동일한 선호도를 가진 액티비티를 완료합니다.

이것은 나에게 도움이 되는 In Top Payment 화면에서는 모든 백스택 액티비티를 삭제합니다.

@Override
public void onBackPressed() {
         finishAffinity();
        startActivity(new Intent(PaymentDoneActivity.this,Home.class));
    } 

http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29

저 같은 경우에는finishAffinity()다음과 같은 마지막 활동에서 기능합니다.

finishAffinity()
startHomeActivity()

유용했으면 좋겠다.

이를 위해 구현한 솔루션(Stack Overflow 어딘가에서 찾은 것 같습니다만, 기억나지 않습니다.처음에는 이 솔루션을 실행한 사람에게 감사했습니다).

모든 액티비티에서 다음 작업을 수행합니다.

// Clear your session, remove preferences, etc.
Intent intent  = new Intent(getBaseContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

그런 다음 LoginActivity에서 onKeyDown을 덮어씁니다.

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

앱의 마지막 화면에 있는 로그아웃 버튼은 로그아웃 버튼 리스너에서 이 코드를 사용하여 열려있는 모든 이전 작업을 완료하면 문제가 해결됩니다.

{
Intent intent = new Intent(this, loginScreen.class);
ntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
    Intent i1=new Intent(getApplicationContext(),StartUp_Page.class);
i1.setAction(Intent.ACTION_MAIN);
i1.addCategory(Intent.CATEGORY_HOME);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
i1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i1);
finish();

나는 네가 사용할 수 있는 같은 문제를 가지고 있다.IntentCompat다음과 같이 입력합니다.

import android.support.v4.content.IntentCompat;
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);

이 코드는 나에게 효과가 있다.

안드로이드 API 17

사용하는 대신finish()그냥 사용하다finishAffinity();

로그인 -> 홈 -> 화면 1 -> 화면 2 -> 화면 3 -> 화면 4 -> 화면5

화면 4(또는 기타) ->

Start Activity(로그인)
with
FLAG_ACTIVITY_CLEAR_정상

API > = 15에서 API 23으로 간단한 솔루션을 제공합니다.

 Intent nextScreen = new Intent(currentActivity.this, MainActivity.class);
 nextScreen.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | IntentCompat.FLAG_ACTIVITY_CLEAR_TASK);
 startActivity(nextScreen);
 ActivityCompat.finishAffinity(currentActivity.this);

사용하시는 경우startActivityForResult()이전 활동에서 그냥 덮어쓰기만 하면 됩니다.OnActivityResult()에 전화합니다.finish();모든 활동에서 그 안에 있는 방법..이걸로 충분할 거야

사용자가 로그아웃 버튼을 클릭하면 다음 코드를 기록합니다.

Intent intent = new Intent(this, LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

또한 로그인 후 새로운 액티비티를 호출할 경우 finish()를 사용하지 마십시오.

늦은 것 같은데 답이 간단하고 짧아요.액티비티에는 현재 액티비티와 모든 부모 액티비티를 종료하는 finishAffinity() 메서드가 있지만 Android 4.1 이상에서만 작동합니다.

API 16+의 경우,

finishAffinity();

16 미만인 경우,

Activity Compat.finishAffinity(YourActivity.this);

도움이 됐으면 좋겠다!

shareedit은 18년 5월 27일 8:03에 응답했습니다.

악샤이 타루

간단하게 로그인 화면을 종료할 때가 아니라 로그인 화면에서 이동합니다.

다음으로 모든 향후 액티비티에서 로그아웃에 사용합니다.

final Intent intent = new Intent(getBaseContext(), LoginScreen.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);

완벽하게 작동한다.

사용자 로그인 시screen 1거기서 다른 화면으로 이동하여

Intent intent = new Intent(this, Screen1.class);
intent.addFlags(FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

이쪽을 찾았으니 모든 기록이 지워지고 나갈 거야

Intent startMain = new Intent(Intent.ACTION_MAIN);
startMain.addCategory(Intent.CATEGORY_HOME);
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(startMain);
Intent intent = new Intent(getApplicationContext(), SplashScreen.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

finish();
System.exit(0);

이 솔루션은 API 레벨에 관계없이 모든 디바이스에서 동작할 수 있습니다(< 11 ) 。

Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);

이전 액티비티를 모두 종료하고 메모리를 클리어하는 최선의 방법

finishAffinity()
System.exit(0);

나는 내 쪽에서 깃발을 시험해 보았지만 여전히 효과가 없었다.저는 비슷한 디자인의 어플리케이션을 가지고 있고 논리적으로도 가능한 해결책을 가지고 있습니다.공유 환경설정을 사용하여 로그인 및 로그아웃을 작성했습니다.

로그아웃하면 공유 환경설정에 있는 데이터가 삭제/삭제됩니다.

Home.java 등의 액티비티에서 공유 환경설정에 데이터가 있는지 확인합니다.이 경우는, 어느쪽인가의 화면에서 로그아웃 했을 때에 데이터를 파기했기 때문에 데이터가 없습니다.따라서 로직은 해당 액티비티를 파기/종료하고 Login 액티비티로 돌아갑니다.이 논리는 다른 모든 액티비티에서 복제할 수 있습니다.

단, 이 체크는 Home.java로 돌아왔을 때 호출되므로 onPostResume() 내에서 실행해야 합니다.

아래 코드 샘플:

@Override
protected void onPostResume() {
    SharedPreferences pref = this.getSharedPreferences("user_details", Context.MODE_PRIVATE);
    if (pref.getAll().isEmpty()){
        //Shared Preferences has no data.
        //The data has been deleted
        Intent intent = new Intent(getApplicationContext(), Login.class);
        startActivity(intent);
        finish();
        //Finish destroys that activity which in our case is the Home.java
    }


    super.onPostResume();
}

언급URL : https://stackoverflow.com/questions/6330260/finish-all-previous-activities

반응형