내 프로필 활동 에서 로그 아웃 버튼을 클릭 할 때 사용자가 새 자격 증명을 사용해야 하는 로그인 페이지로 이동 하고 싶습니다 .
따라서이 코드를 사용했습니다.
Intent intent = new Intent(ProfileActivity.this,
LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
에서 onButtonClick
로그 아웃 버튼.
그러나 문제는 로그인 활동에서 장치 뒤로 버튼을 클릭하면 ProfileActivity로 이동한다는 것입니다. LoginActivity에서 장치 뒤로 버튼을 누르면 응용 프로그램이 닫힐 것으로 예상했습니다.
내가 뭘 잘못하고 있죠?
또한 android:launchMode="singleTop"
내 LoginActivity 의 매니페스트에 추가 했습니다.
감사합니다
답변
여기 에서 제안 된 솔루션 이 저에게 효과적이었습니다.
자바
Intent i = new Intent(OldActivity.this, NewActivity.class);
// set the new task and clear flags
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(i);
Kotlin
val i = Intent(this, NewActivity::class.java)
// set the new task and clear flags
i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(i)
그러나 API 레벨> = 11이 필요합니다.
답변
다음은 로그 아웃 버튼을 사용할 때 애플리케이션의 모든 활동을 지우는 한 가지 솔루션입니다.
활동을 시작할 때마다 다음과 같이 시작하십시오.
Intent myIntent = new Intent(getBaseContext(), YourNewActivity.class);
startActivityForResult(myIntent, 0);
전체 앱을 닫으려면 다음을 수행하십시오.
setResult(RESULT_CLOSE_ALL);
finish();
RESULT_CLOSE_ALL은 모든 활동을 닫고 싶다는 신호를 보내는 고유 한 정수가있는 최종 전역 변수입니다.
그런 다음 모든 활동의 onActivityResult(...)
콜백을 정의 하여 활동이 RESULT_CLOSE_ALL 값과 함께 반환되면 다음도 호출합니다 finish()
.
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch(resultCode)
{
case RESULT_CLOSE_ALL:
setResult(RESULT_CLOSE_ALL);
finish();
}
super.onActivityResult(requestCode, resultCode, data);
}
이것은 모든 활동을 닫는 계단식 효과를 유발합니다.
그러나 이것은 해킹이며 사용 startActivityForResult
하도록 설계되지 않은 방식으로 사용합니다.
이를 수행하는 더 좋은 방법은 다음과 같이 브로드 캐스트 수신기를 사용하는 것입니다.
로그 아웃시 활동 내역 스택을 지우고 “뒤로”버튼이 로그인 전용 활동을 열지 못하도록합니다.
다른 방법에 대해서도 다음 스레드를 참조하십시오.
답변
활동 스택을 완전히 지우려면 TaskStackBuilder를 사용하여 새 작업 스택을 만들려고합니다. 예를 들면 다음과 같습니다.
Intent loginIntent = LoginActivity.getIntent(context);
TaskStackBuilder.create(context).addNextIntentWithParentStack(loginIntent).startActivities();
이렇게하면 새롭고 깨끗한 작업 스택이 생성 될뿐만 아니라 LoginActivity에 상위 활동이있는 경우 “up”버튼이 제대로 작동 할 수 있습니다.
답변
finishAffinity()
API 16에 추가되었습니다 ActivityCompat.finishAffinity()
. 이전 버전에서 사용 합니다. 인 텐트를 사용하여 활동을 시작하고 현재 활동을 완료 할 때. 이제 ActivityCompat.finishAffinity()
대신 사용하십시오 finish()
. 현재 활동 아래의 모든 누적 활동을 완료합니다. 그것은 나를 위해 잘 작동합니다.
답변
나를 위해 일한 것
Intent intent = new Intent(getApplicationContext(), HomeActivity.class);
ComponentName cn = intent.getComponent();
Intent mainIntent = IntentCompat.makeRestartActivityTask(cn);
startActivity(mainIntent);
답변
내가 제안 할 수있는 한 가지 가능한 해결책 android:launchMode="singleTop"
은 내 ProfileActivity 에 대한 매니페스트에 추가 하는 것입니다 . 클릭하면 로그 아웃하고 u는 수 로그 오프 하면 다시 시작 LoginActivity합니다.
로그 아웃시 u는 이것을 부를 수 있습니다.
Intent in = new Intent(Profile.this,Login.class);
in.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(in);
finish();
답변
API 11+의 경우 다음 Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
과 같이 사용할 수 있습니다 .
Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);
모든 이전 활동을 완전히 지우고 새로운 활동을 시작합니다.