1. 우선 A 라는 액티비티에 Context 객체를 static으로 선언하고 객체를 생성합니다.
static Context mContext;
mContext = this;
2. 이 mContext를 이용해서 다이얼로그 코드를 짭니다.
Dialog dialog = new AlertDialog.Builder(mContext, AlertDialog.THEME_HOLO_DARK);
...... (중략)....
.show();
3. 이 다이얼로그 코드를 실행 시킬 수 있는 버튼을 배치합니다.
4. 그리고 intent로 A 액티비티를 추가로 띄울 수 있는 버튼도 하나 배치합니다.
자, 이제 테스트입니다.
애플리케이션을 실행하고 A 액티비티로 가서 다이얼로그가 우선 잘 작동되는지 테스트 해 보시고,
이제 버튼을 눌러 A 액티비티를 추가로 띄웁니다.
그리고 백키를 눌러 돌아간 후 다이얼로그 버튼을 실행시켜 봅니다.
그러면 2.3버전과 4.1버전들에서 강종이되고 4.0 버전들에서는 반응이 없네요.
분명 잘 작동하던 다이얼로그가 똑같은 액티비티 하나 더 띄우고 돌아왔다고 저리 됩니다.
결론은, mContext에 static을 없애면 정상 작동 합니다.
제가 정말 왜 mContext를 static으로 한지는 기억이 안나지만
이거 때문에 개발중에 다른쪽에서 헛발질 좀 했네요......ㅠㅠ (그래서 '치명적인 버그'...... 낚시제목 ㄱㅅ)
근데, 이게 원래 정상적인건 아니죠? 누가 영어 잘 되시는 분은 안드로이드 팀에 리포트좀 해주세요ㅎㅎ
이건 버그가 아닙니다. Context는 static으로 받아서 쓰면 안됩니다. static한 Context를 쓰고 싶으면 getApplicationContext() 로 애플리케이션 Context를 사용해야 합니다.
static은 같은 클래스가 공유하는 정적 인스턴스이기 때문에 A클래스가 추가로 띄워지면 가장 나중에 띄워진 Activity Context가 static 인스턴스가 되기 때문에 이미 백을 해서 사라지고 없는 Context의 참조를 넣고 Dialog를 만들어 봤자 소용없는겁니다.

Context는 애플리케이션이 돌아가기 위해 밑바탕에 깔려져 있어야 하는 필요한 시스템 자원들이기 때문에 이게 없을 수는 없을 것 같습니다. 이름이야 뭐가 됐던 이런건 있어야 될것 같고요, 우리가 앱을 개발할 때 시스템 차원의 자원들을 바로 이 Context로부터 손쉽게 꺼집어 낼수 있기 때문에 친해지면 좋은 도구가 될것 같습니다.
왜 강종 되는지 로그를 봐야 될 것 같네요.