시스템 종료를 하고 싶은데"??
System.exit(0);
했는데 종료가 안되네요 ㅠㅠ
머가 문제 인지,, 인텐드로 이 페이지 온건데 대화상자창으로 구현해서 예일때 시스템을 아예 종료해라는 명령어를 줬는데...
안되네요~ ㅠㅠ
머가 문제일까요ㅠㅠ
sub1.java
package Dong.New;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
public class sub1 extends Activity {
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.sub1);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {//키보드 관리 메소드
switch (keyCode) { //키코드
case KeyEvent.KEYCODE_BACK: //키이벤트중에 머를 눌렀을경우!!
//TODO
AlertDialog.Builder bid = new AlertDialog.Builder(sub1.this);//대화상자 객체 생성
bid.setTitle("종료");//타이틀!
bid.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
System.exit(0);
}
});
bid.setNegativeButton("아니오", null);
bid.show();//보여주는 역활 꼭 사용 해야함
return true;
}
return false;
}
}
main.java
package Dong.New;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
public class main extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Handler h = new Handler(); //핸들러 객체 생성
Runnable r = new Runnable() { //러나블(할수있는)
@Override
public void run() {
// TODO Auto-generated method stub
Intent intent = new Intent(main.this,sub1.class);
startActivity(intent);
}
};
h.postDelayed(r, 3000);//핸들로.메소드(객체,시간)
}
}
포도맛카라님 죄송한데요 이렇게 구현했는데... 종료는 안되고 뒤화면으로 넘어가기만하더라고요 ㅠㅠ package Dong.New;
import android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.view.KeyEvent;
public class sub1 extends Activity {
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.sub1);
}
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
System.exit(0);
}
public boolean onKeyDown(int keyCode, KeyEvent event) {//키보드 관리 메소드
switch (keyCode) { //키코드
case KeyEvent.KEYCODE_BACK: //키이벤트중에 머를 눌렀을경우!!
//TODO
AlertDialog.Builder bid = new AlertDialog.Builder(sub1.this);//대화상자 객체 생성
bid.setTitle("종료");//타이틀!
bid.setPositiveButton("예", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
onDestroy();
}
});
bid.setNegativeButton("아니오", null);
bid.show();//보여주는 역활 꼭 사용 해야함
return true;
}
return false;
}
}
밑에서도 댓글을 달았지만 핸들러같이 화면에 보여지는 activity와 무관하게 백그라운드 작업을 하게될때는 System함수 사용은 위험합니다..
어거지로 궂이 해결하자면.. main activity를 처음 intent후 다시 사용할일이없다고 가정하에.. run()메쏘드안 intent호출 한 문장 밑에
System.exit(0)을 추가해주세요..
추가로 Intent를 저렇게 특정이벤트없이 onCreate에서(핸들러를 사용하지 않는다고 가정했을경우에도..) 사용하시는것도 좋지는 않을것같네요.. 관련 자료를 찾아봐야겠지만, Dialog도 생명주기가 약간 독특하다고 들어서 application manager와 관련되 조금 문제의 소지가 있을것 같거든요..




핸들러를 주면 어플과 무관하게 메세지큐로 데이터가 들어가기때문에 system.exit(0)을 쓰시더라도 미리 보내놓은 명령어가 프레임워크단에 남아있어서 요상하게 작동합니다..
그리고
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
System.exit(0); <<--- 요놈을 onDestroy()로 바꿔주시고..
}
});
sub1 클래스 안.. oncreate() { } 밑에 onDestroy 오버라이드 하셔서..
onDestroy() {
super.onDestroy();
System.exit(0);
}
요걸 추가해주세요..