2010-08-12 3 views
0

앱의 기본 화면에 START 및 STOP 버튼이 있습니다. START를 클릭하면 인스턴스화되는 GUI와 스레드가 있습니다. 중지를 클릭하면 모든 것이 중단되고 활동이 원래 상태로 되돌아 가야합니다. 시작했을 때와 똑같은 상태 (모바일에서 앱 아이콘을 누를 때). 가능합니까? 나는 finish()로 시도했는데,이 앱을 죽이고 나갔다. 나는 메인 화면을 종료하고 싶지 않다. 오히려 STOP을 클릭하면 앱이 원산지 또는 태어난 상태로 돌아 가기를 원합니다. 감사.앱의 활동을 중지하거나 새로 고침

답변

1

스레드를 어떻게 실행하고 있습니까? AsyncTask의 바닐라 스레드 또는 하위 클래스입니까? 다음은 AsyncTask 개체의 인스턴스 인 경우

, 당신은 그것을 취소 할 cancel() 방법을 사용할 수 있습니다 다음 doInBackground() 방법 안에, 당신은 그것이 실제로 취소되어 있는지 확인하기 위해 isCancelled() 방법을 확인할 수 있습니다 후 정상적으로 종료합니다. 아래

의사 코드 :

private YourTask taskRef; 

public void btnStartHandler() { 
    taskRef = new YourTask(); 
    taskRef.execute(); 
} 

public void btnStopHandler() { 
    taskRef.cancel(); 
} 

다음, 당신의 AsyncTask를에 : 당신이 스레드를 사용하는 경우

public Void doInBackground(Void... arg0) { 
    // Background loop start 
    if (this.isCancelled()) { 
     return; 
    } 
    // Background loop continue... 
} 

, 당신이 그들을 중단하고 예외를 잡아 거기를 처리 할 수 ​​있습니다. 또한 onCreate() (initApp()) 또는 모든 것을 초기화하는 메서드에서 호출하는 메서드를 만들 수 있습니다. 또한 STOP 버튼 클릭 핸들러에서 initApp()을 사용하여 값을 다시 시작 기본값으로 재설정 할 수 있습니다.

+0

) 중 하나

더 많은 활동을 다시 시작하는 방법에 대한 정보 및 장단점에 대한 설명은이 질문을 참조하십시오. –

+0

주의를 기울 였다면, 나는 그 메소드를 생성하고'onCreate()'에서 호출 할 것을 제안했다. 당신이하는 일에 대한 좀 더 많은 정보는 당신이 찾고있는 해답을 얻는 데 확실히 도움이 될 것입니다. – TJF

+0

+1 누구든지이 유익한 대답을 왜곡 한 사람을 보완합니다. – hpique

0

finish()으로 작업을 다시 시작한 다음 startActivity(getIntent());으로 전화를 걸 수 있습니다. 이렇게하면 활동을 시작한 상태와 상관없이 활동이 효과적으로 다시 시작되고 기본 상태가됩니다.

TJF가 제안한대로 스레드 또는 AsyncTasks를 모두 취소하기 전에 (onDestroy 오버로드에서이 작업을 수행 할 수 있고해야 함). Reload activity in Android이 내가 (그런 initapp, 무엇을 찾고 있었다 아니었다

관련 문제