안드로이드 개발 질문/답변
(글 수 45,052)
SurfaceView (A Activity)에서 Intent 사용해서 다음 B Activity를 불렀습니다. (context.startActivity() 사용했어요.
그런데 문제는 그 다음 Activity로 넘어갔다가 1초정도 되면 자동으로 화면이 다시 A Activity로 넘어와요.
그래서 B Activity 에서는 아무 작업도 할 수 없거든요.
어떻게 이 문제를 해결할 수 있죠?
public class MyGameView extends SurfaceView implements Callback {
Activity a = new Activity();
GameThread mThread;
SurfaceHolder mHolder;
private boolean running = false; // to stop Thread
private GestureDetector gestureDetector; // Double Tab 관련 메소드
public MyGameView(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
mHolder = holder;
mThread = new GameThread(holder, context);
gestureDetector = new GestureDetector(new EventCatch()); // Double Tab 등 다양한 이벤트 사용하기 위해 선언
setFocusable(true); // View가 포커스를 받을 수 있도록 설정
}
class GameThread extends Thread {
SurfaceHolder mHolder; // SurfaceHolder를 저장할 변수
Context mContext;
public GameThread(SurfaceHolder holder, Context context) {
mHolder = holder; // SurfaceHolder 보존
mContext = context;
}
public void NextFile() {
/////----> Start.class Activity로 잘 넘어갔는데 곧바로 다시 돌아옴
Intent intent = new Intent(mContext, my.bubblenew.getImage.Start.class);
mContext.startActivity(intent);
}
public void run() {
Canvas canvas = null; // canvas를 만든다
while (running) {
canvas = mHolder.lockCanvas(); // canvas를 잠그고 버퍼 할당
////// 그림 그려서 움직임 나타냄
} // while
} // run
} // GameThread 끝
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
private class EventCatch extends SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
synchronized (mHolder) {
//// -> 여기서 Intent 사용할 Thread 내의 함수를 부름
mThread.NextFile();
}
return true;
}
}
} // SurfaceView
그런데 문제는 그 다음 Activity로 넘어갔다가 1초정도 되면 자동으로 화면이 다시 A Activity로 넘어와요.
그래서 B Activity 에서는 아무 작업도 할 수 없거든요.
어떻게 이 문제를 해결할 수 있죠?
public class MyGameView extends SurfaceView implements Callback {
Activity a = new Activity();
GameThread mThread;
SurfaceHolder mHolder;
private boolean running = false; // to stop Thread
private GestureDetector gestureDetector; // Double Tab 관련 메소드
public MyGameView(Context context, AttributeSet attrs) {
super(context, attrs);
SurfaceHolder holder = getHolder();
holder.addCallback(this);
mHolder = holder;
mThread = new GameThread(holder, context);
gestureDetector = new GestureDetector(new EventCatch()); // Double Tab 등 다양한 이벤트 사용하기 위해 선언
setFocusable(true); // View가 포커스를 받을 수 있도록 설정
}
class GameThread extends Thread {
SurfaceHolder mHolder; // SurfaceHolder를 저장할 변수
Context mContext;
public GameThread(SurfaceHolder holder, Context context) {
mHolder = holder; // SurfaceHolder 보존
mContext = context;
}
public void NextFile() {
/////----> Start.class Activity로 잘 넘어갔는데 곧바로 다시 돌아옴
Intent intent = new Intent(mContext, my.bubblenew.getImage.Start.class);
mContext.startActivity(intent);
}
public void run() {
Canvas canvas = null; // canvas를 만든다
while (running) {
canvas = mHolder.lockCanvas(); // canvas를 잠그고 버퍼 할당
////// 그림 그려서 움직임 나타냄
} // while
} // run
} // GameThread 끝
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
return gestureDetector.onTouchEvent(event);
}
private class EventCatch extends SimpleOnGestureListener {
@Override
public boolean onDown(MotionEvent e) {
// TODO Auto-generated method stub
return true;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
// TODO Auto-generated method stub
synchronized (mHolder) {
//// -> 여기서 Intent 사용할 Thread 내의 함수를 부름
mThread.NextFile();
}
return true;
}
}
} // SurfaceView



