열심히 안드로이드 공부하면서 어플 제작중에
android.view.WindowLeaked: Activity 도메인.MainActivity has leaked window com.android.internal.policy.impl.PhoneWindow$
DecorView{1cae0442 V.E..... R....... 0,0-1025,408} that was originally added here
이런 에러가 로그캣에 떳다.
해석해도 모르겠다 이건.
MainActivity에 있는 폰에 뒤로버튼 눌렀을 때(onBackPressed() 오버라이딩)
AlertDialog 써서 "앱을 완전히 종료하시겠습니까?" "예" "아니오" 띄우려는 부분이었다.
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(), "뒤로버튼 눌림!!", Toast.LENGTH_SHORT).show();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("앱을 완전히 종료하시겠습니까?");
builder.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// process 전체 종료!
finish();
//android.os.Process.killProcess(android.os.Process.myPid());
}
});
builder.setNegativeButton("아니요", null);
builder.show();
그래서 열심히 구글에 찾아보니,
대충 문제는 Dialog가 떴을 때 앱이 종료된다거나,
dismiss()없이 바로 액티비티를 종료시켜서 그러하단다.
아 내가 NegativeButton 부분에 아무것도 안줬구나, 하고 수정했다.
builder.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
이것도 문제였는데 이것만이 문제가 아니었음. 또 같은 Exception이 뜸.
저 출처 페이지에서 Dialog를 다 죽이고 액티비티를 죽여보라고 하길래,
"예" 클릭리스너 부분을 수정했다.
builder.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// process 전체 종료!
onPause();
dialogInterface.dismiss();
finish();
//android.os.Process.killProcess(android.os.Process.myPid());
}
onDestroy(), onPause(), dismiss() 를 계속 섞어가면서 써봤는데,
틀렸다.
너~무 기초가 없어서 닥치는데로 하고만 있었다.
음 .... 내 생각으로....... 해석해보자면
Pause() Builder(AlertDialog)를 중지시키고
dialogInterface 이 리스너의 인터페이스를 .dismiss()로 완전 묵살시키고
finish() 그러고 끝낸다.
그러니 잘 돌아간다.
고친코드:
@Override
public void onBackPressed() {
Toast.makeText(getApplicationContext(), "뒤로버튼 눌림!!", Toast.LENGTH_SHORT).show();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("앱을 완전히 종료하시겠습니까?");
builder.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// process 전체 종료!
onPause();
dialogInterface.dismiss();
finish();
//android.os.Process.killProcess(android.os.Process.myPid());
}
});
builder.setNegativeButton("아니요", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialogInterface.cancel();
}
});
builder.show();
}
반응형
'개발 > ETC' 카테고리의 다른 글
[Report Designer] 간단한 기능 정리 (2) | 2020.02.05 |
---|---|
쪽지 전송 로직(미완성) (2) | 2019.12.15 |
[jqGrid] jqGrid 새로 고침 하기 (0) | 2019.10.27 |
각종 그리드 솔루션 집합 (8) | 2019.09.02 |
[MiPlatform] 해당 dll이 존재하는지 확인하십시요. [ExtCommonApi] (0) | 2018.12.01 |