안녕하세요
저는 지금 버튼을 클릭했을때 어플이 종료되도록 하고 있습니다.
현재 탭 액티비티에 탭이 4개이고 탭별로 액티비티를 만들어두었습니다.
4번째 탭이 SettingActivity이고 거기서 TextView를 클릭하면 LoginInfoActivity로 이동하게 되어 있습니다.
LoginInfoAcitivity에서 Back키를 누르면 SettingActivity로 돌아가게 하려고 Intent할때 SettingActivity에 finish()를 하지 않았습니다.
저는 지금 현재 LoginInfoActivity에서 버튼을 누르면 SettingActivity(이전의 액티비티)와 LoginInfoActivity 모두 종료되게 하고 싶습니다.
LoginInfoActivity에서 버튼을 누르면 어플이 종료 되는것이지요 -
검색해서 다음의 방법들을 써보았습니다.
1.
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
am.restartPackage(getPackageName());
2.
android.os.Process.killProcess(android.os.Process.myPid());
3.
System.exit(0);
4.
ActivityManager am = (ActivityManager)getSystemService(ACTIVITY_SERVICE);
am.killBackgroundProcesses(getPackageName());5.
for (int i = 0; i < LoginInfoActivity.at.size(); i++) {
LoginInfoActivity.at.get(i).finish(); //List가 Static 이므로, Class명.변수명.get으로 접근
}1~4번의 방법들은 모두 LoginInfoActivity만 종료되었구요..(매니페스트에 퍼미션 다 추가했습니다.)
마지막 5번의 방법은 버튼을 눌러도 아무런 이벤트가 발생하지 않았습니다..
버튼 눌렀을때 어플 종료 되게 하려면 어떻게 해야하나요 ㅠ?
고수분들의 조언 부탁드립니다
Main Activity 에서 new Handler 를 통해 Handler 객체를 생성합니다.
이 핸들러를 static 메소드나 set/get 메소드나 다른 여러가지 방법을 이용해 다른 Activity 에서 사용할 수 있도록 정의한 후에
종료를 하고자 하는 Activity 에서 Handler 객체를 받아옵니다.
그 후에 이 Handler 를 통해 Message 를 보내면 Main Activity 의 Handler 에서 수신을 하게 되겠죠
그 후에 finishActivity(0) 을 호출하게 되면 startActivityForResult(0) 을 통해 호출된 모든 Activity 들을 종료하게 됩니다.
0 은 ID 값으로 임의의 값을 넣으셔도 되고요.
어느엑티비티에서건 백버튼으로 종료가 하고 싶으시면 그냥 다른 엑티비티로 이동할때는 무조건 finish()로 전 엑티비티를 종료하고 이동하세요. 특정엑티비티에서만은 백눌럿을때 전 엑티비티로 돌리고 싶으시면 그냥 백버튼 키이벤트 가로채서 해당페이지에서만 전페이지 호출하게 하시고요.
더 좋은 다른방법들도 있을수 있다 생각하지만 심플이 최고라 생각됩니다 후후
class ActivityTask {
public static ActivityTask INSTANCE = new ActivityTask();
private List<Activit> mList;
private ActivityTask () {
mList = new ArrayList();
}
public void add(Activity act) {
mList.add(act);
}
public void clear() {
for (Activity act : mList) {
act.finish();
}
}
}
class LoginInfoAcitivity {
public void onCreate(...) {
ActivityTask.INSTANCE.add(this);
}
public void onBackPressed() {
super.onBackPressed();
ActivityTask.INSTANCE.clear();
}
}
class SettingActivity {
public void onCreate(...) {
ActivityTask.INSTANCE.add(this);
}
}
대강 이런패턴으로 하면 될듯한데용




제가 구현했던 방식을 적어보자면...Main Activity 에서 핸들러 생성 후 이 핸들러를 static 으로 관리를 했습니다.
이후 모든 Activity 는 startActivityForResult(0) 으로 호출을 하였고, 종료하고자 하는 Activity 에서 Main Activity 에서 만든 핸들러를
가져와 Message 를 보냅니다. Main Activity 에서 종료 Message 를 수신하면 finishActivity(0) 을 수행하는 방식으로 했습니다.
스택의 상위 Activity 에서 하위 Activity 를 종료시키려고 하시는거라면 다른 방법을 찾아보셔야 겠지만
어느 Activity 에서든 종료만 되게끔 하시는 거라면 핸들러의 Message 와 startActivityForResult, finishActivity 메소드를
이용해서 스택의 첫 Activity 에서 상위의 Activity들을 정리하는 방식으로 하셔도 될 것 같습니다.