[Android:JAVA] onBackPressed() Deprecated에 따른 대응책 해결방법
안드로이드 앱 개발시 TargetSdk 버전을 34로 올리는 경우, onBackPressed()를 더이상 액티비티에서 사용할 수 없게되었다. 동일한 기능을 구현하기 위해서는 onCreate()에서 getOnBackPressedDispatcher() 메소드를 선언해주고 callBack메소드를 구현하여 처리하면 된다.
코틀린 말고, 자바에서 onBackPressed() Deprecated 대응 방법
AS-IS
@Override
public void onBackPressed() {
LinearLayout linearLayout3 = (LinearLayout) exitDialog.findViewById(R.id.linearLayout3);
linearLayout3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.linearLayout3) {
exitDialog.dismiss();
}
}
});
LinearLayout linearLayout4 = (LinearLayout) exitDialog.findViewById(R.id.linearLayout4);
linearLayout4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.linearLayout4) {
exitDialog.dismiss();
finish();
}
}
});
exitDialog.show();
}
TO-BE
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.....생략.......
//onBAckPressed : deprecated 대응
getOnBackPressedDispatcher().addCallback(this, callback);
}
//콜백 생성
OnBackPressedCallback callback = new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
LinearLayout linearLayout3 = (LinearLayout) exitDialog.findViewById(R.id.linearLayout3);
linearLayout3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.linearLayout3) {
exitDialog.dismiss();
}
}
});
LinearLayout linearLayout4 = (LinearLayout) exitDialog.findViewById(R.id.linearLayout4);
linearLayout4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (v.getId() == R.id.linearLayout4) {
exitDialog.dismiss();
finish();
}
}
});
exitDialog.show();
}
};
extends AppCompatActivity 를 사용할때
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.....생략.......
// 2. 백 버튼 감지 콜백 등록 (최신 방식)
getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
@Override
public void handleOnBackPressed() {
callExitDialog();
}
});
extends Activity를 사용할때
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
.....생략.......
// 2. 백 버튼 감지 콜백 등록 (최신 방식)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
getOnBackInvokedDispatcher().registerOnBackInvokedCallback(
OnBackInvokedDispatcher.PRIORITY_DEFAULT,
() -> {
callExitDialog();
}
);
} else {
// deprecated지만 여전히 동작
// override로 처리
}



