2012-11-08 6 views
0

태블릿 용 Android 앱 (ICS)을 쓰고 있습니다. 사용자는 버튼을 눌러 활동 A에서 활동 B로 활동 C로 이동합니다. 10 초 후에 활동 C에서 활동 A로 돌아가고 싶습니다. 활동 C를 잠그지 않고 10까지 셀 수있는 방법이 있습니까?android 앱 활동을위한 유휴 시간 초과

asyncTask를 성공했지만 onPostExecute()에서 startActivity (A)를 사용하면 asyncTask가 UI를 엉망으로 만들지 않아야한다는 지침을 위반하고있는 것처럼 느껴집니다. 나는 get()을 시도했으나 10 초를 기다리는 동안 Activity C를 잠근다.

미리 감사드립니다.

+2

타이머 대신 AsyncTask를 사용하는 이유는 무엇입니까? – RvdK

+1

왜 '타이머'를 사용합니까? 안드로이드의 이벤트 시스템 (Handler 참조)은 더 가벼운 솔루션을 제공합니다. –

답변

0

AsyncTask를 사용하면 설명대로 잘 작동합니다. Android 문서에서 :

onPostExecute (결과) 백그라운드 계산이 완료된 후 UI 스레드에서 호출됩니다.

UI 스레드에서 호출되었으므로 괜찮을 것입니다.

Documentation

0

당신은이에 대한 경보 관리자를 사용할 수 있습니다. 액티비티 a에서 시작하여 10 초 방송을 보내고 액티비티 a와 b에 대한 기본 액티비티를 구현하도록 브로드 캐스트를 수신하도록 설정하고, 브로드 캐스트를 수신 한 후 현재 액티비티를 종료하고 새 플래그로 액티비티를 시작합니다. 현재 인스턴스가 활동 인 경우 활동을 시작하지 않으면 무시합니다. 그런 것. 당신이 등

이 구현의 장점을 활동을 들어갈 때, 모든 행동에 알람 매니저를 업데이트 할 수 있습니다 유휴 부분으로

는 상황에 맞는 누출에 대해 걱정할 필요의 번거 로움을 통해 갈 필요 없다이다 활동 전반에 걸쳐 타이머를 지속시킵니다. 이미있는 것을 사용할 수 있습니다. 또한 서비스 사용을 고려할 수도 있습니다.

공유 환경 설정 저장소를 사용하여 시간 초과 시간을 확인하고 작업에 대해 확인 또는 업데이트 할 수 있습니다. 더 간단한 구현.

행운을 빈다.

1

활동에 View 인스턴스가 있다고 가정하면 View.postDelayed()을 사용하여 주어진 지연 시간으로 실행 파일을 게시 할 수 있습니다. 이 실행 파일에서 Activity.finish()으로 전화 할 수 있습니다. 사용자가 이미 활동에서 다시 탐색 한 후에도 콜백이 호출되지 않도록하려면 에 콜백을 제거하려면 View.removeCallbacks()을 사용해야합니다.

을 사용하는 것은 단지 과장입니다 (실제로 유용한 배경 작업을 수행하려면 AsyncTask을 사용하지 않는 한). LooperHandler 클래스는 주어진 지연 후에 UI 스레드에서 코드를 실행하는 데 필요한 모든 것을 제공합니다. 위에서 언급 한 View 메서드는 Handler 기능을 노출하는 편리한 방법 일뿐입니다.