안드로이드 개발 질문/답변
(글 수 45,052)
Act1Activity.java 파일
public class Act1 extends Activity {
private MyView view = null; public static boolean allClear = false; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { this.view = new MyView(this, null); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } this.view.setFocusable(true); this.view.setFocusableInTouchMode(true); setContentView(view);
if(allClear){
finish();
}
}
}
MyView.java 파일
class MyView extends view{
class MyThread extends Thread {
public void run() {
~~
if(~~){
Act1.allClear = true;
}
~~
}
}
}
이런식으로 쓰레드에서 어떤 조건을 만족하면 static 변수를 이용해서액티비티를 종료시킬려고 합니다.그런데 이렇게 하면 정상적으로 실행이 안되네요...뭔가 다른 확실한 방법이 없을까요>?
2012.05.24 16:27:57
자바 공부를 좀 하셔야 겠네요.
스레드가 돌면서 조건식이 만족되어도
이미 onCreate가 실행되고 난 뒤기 때문에
전역변수의 값만 바뀌고 아무 일도 일어나지 않습니다.
이럴때 쓰라고 interface라는게 있습니다.
객체와 객체를 연결시켜주는거라고 생각하심 됩니다.
view와 activity를 연결시켜서 view에서 인터페이스를 호출하면
activity에서 정의된 동작을 실행할 수 있습니다.
2012.05.25 00:10:38
public class Act1 extends Activity {
private static Context mContext;
public static void destroy() {
if (mContext != null)
((Act1)mContext).finish();
}
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
mContext = this;
...
}
}
-----
class MyView extends view{
class MyThread extends Thread {
public void run() {
~~
if(~~){
Act1.destroy();
}
~~
}
}
}
thread를 실행시키는 부분은 어디죠?
만약 뷰를 클릭했을때 thread를 실행시킨다면 당연히 동작 안합니다
onCreate에다가 if(allClear) { finish(); } 를 넣으셨는데 당연히 create될때에는 allClear는 초기값이겠죠