*/Android

[안드로이드] Intent Flag 설정하여 로그아웃, 회원탈퇴 처리

sssbin 2021. 8. 25. 22:41

 

 

⭐️⭐️ 안드로이드 액티비티는 스택에 계속 쌓이기 때문에 각 액티비티의 흐름을 제어해줄 필요가 있다. ⭐️⭐️

-> 이때 Intent Flag를 이용하여 제어할 수 있음!!

 

1. setFlags: 하나의 flag를 지정한다.

2. addFlags: 기존 flag + 새 flag

 


기존 코드) 로그아웃 -> 첫 화면으로 넘어감

문제점) 뒤로가기 눌렀을 때 전의 기록이 다 남는다는 걸 깨달음..!!

해결) 플래그 설정

 

Intent.FLAG_ACTIVITY_CLEAR_TOP

실행하는 액티비티가 스택에 있으면 새로 시작하지 않고 상위 스택 모두 제거

ex. [ABCDE]가 있고, E에서 C를 열면 상위 DE제거

 

Intent.FLAG_ACTIVITY_SINGLE_TOP

액티비티가 이미 최상단에 있으면 다시 시작하지 않고 재사용

ex. [ABCDE]가 있고, E에서 E를 열면 onPause()->onNewIntent() -> onResume()

 

 

Button logoutButton = (Button) findViewById(R.id.logoutButton);
logoutButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
                Toast.makeText(MemberPageActivity.this, "로그아웃 되었습니다.", Toast.LENGTH_SHORT).show();
                Intent i = new Intent(MemberPageActivity.this, MainActivity.class);
                i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
                startActivity(i);
            }
        });

 

회원탈퇴 부분도 수정해줬다.

 

 

service.userDelete(new DeleteData(input_pw, input_id)).enqueue(new Callback<DeleteResponse>() {
        @Override
        public void onResponse(Call<DeleteResponse> call, Response<DeleteResponse> response) {
                DeleteResponse result = response.body();
                Toast.makeText(MemberPageActivity.this, result.getMessage(), Toast.LENGTH_SHORT).show();

                if (result.getCode() == 200) {
                        Intent i = new Intent(MemberPageActivity.this, MainActivity.class);
                        i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                        startActivity(i);
                }
        }
}

 

로그아웃을 했을 때는 로그인 창에 아이디/비밀번호가 그대로 남고(?) 회원탈퇴를 했을 때는 모두 없어지게 했다!

(로그아웃 - 액티비티를 재사용하기 때문에 전의 기록이 남아있음(?)

회원탈퇴 - 액티비티가 재시작)

 

(왼) 로그아웃 (오) 탈퇴

 

 

[참고] https://jhshjs.tistory.com/50