2013-08-02 1 views
1

내 문제 : 활동이 생성 될 때 OnResume()으로 전화하는 것을 방지 할 수 있습니까? OnCreate()onStart() 메서드가 실행 된 후 보았 듯이 다음 하나는 onResume()입니다. 일시 중지 된 상태에서 작업을 다시 시작할 때만 사용하고 싶습니다.OnResume()의 스레드 결과 사용

왜이 필요합니까 : 내 활동 시작 (FragmentActivity를, 그래서 OnPostResume()을 말할 수) 외부 데이터베이스에서 준비 데이터로 약 2-3s 소요 스레드로 시작. 스레드가 완료되면 이러한 데이터가 필요한 메서드를 호출하고 해당 작업이 표시 될 때마다 호출하려고합니다. 스레드는 FragmentActivity (onCreate())가 만들어 질 때만 실행되며 스레드가 작업을 완료하기 전에 onResume()이 실행되고 있기 때문에 메서드를 onResume()에 넣을 수 없습니다. 따라서 준비되지 않은 데이터를 수신하게됩니다.

누구나 더 좋은 아이디어가 있습니까?

만 전에서 onCreate을 가지고 있지 않은 상태에서도 onResume의를 얻을하고자하는 경우, 단지 플래그를 사용 :

+0

데이터를로드하는 경우 ['Loader'] (http://www.androiddesignpatterns.com/2012/08/implementing-loaders.html) – zapl

답변

0

정확하게 적용 할 수 있을지 모르겠지만 제안을하겠습니다.

AsyncTask을 사용하는 경우이를 전송하여 onPostExcecute() 메서드에서 데이터가 필요한 메서드를 호출하거나 필요에 따라 뷰를 업데이트 할 수 있습니다. (UI 스레드에서 실행 됨)

특정 시나리오에서 필요한 데이터가 이미있는 경우 AsyncTask를 생략하고보기를 직접 업데이트 할 수도 있습니다.

이 AsyncTask는 onResume() 메서드에서 트리거 될 수 있습니다.

뭔가가 누락 된 경우 알려 주시면 의견을 조정할 수 있습니다.

+0

당신은 아무것도 놓치지 않았지만 받아 들여진 대답이 더 쉬운 해결책을 제공한다고 생각합니다. 어쨌든 고마워! –

+0

나는 나의 대답이 더 깨끗하고, 더 모듈화되어 있고, 장기적으로 유지하기가 더 쉽다고 주장 할 것이다. 하지만 다행 이네. –

+0

사실 저는 그저 작업하고 있습니다. 자세한 내용을 말해 줄 수 있습니까? 난 정말 당신의 솔루션을 이해가 안되지만 지금은 OnResume에서 AsyncTask를 트리거 roght이고 그것이 작동하는 것 같습니다. –

0

내가 여기의 목적을 이해하지만하지 않았다가 가능한 솔루션입니다.

onCreate에서 true로 설정하고 onResume에서 플래그를 확인하고 false로 설정합니다. 그것이 사실이라면 onCreate가 전에 호출되었음을 의미합니다.

0

개인적으로 항상 onResume에 getter-code를 실행하는 대신 결과를 사용할 수 있는지 확인하는 것이 좋습니다. 백그라운드 스레드가 완료되기 전에 사용자가 어떻게 든 활동을 다시 시작하면 onResume에 대한 호출이 있지만 결과를 표시하고 싶지는 않습니다.

아마도 스레드에서 값을 계산/가져 오는 것이 좋을 것입니다. 그리고 값이 이미 어딘가에 캐시되어 있으면 즉시 스레드가 반환되게하고 값이 채워지도록 할 수 있습니다. 그렇게하면 UI 대신 두 개의 스레드 (스레드 및 onResume 메서드)를 업데이트하기위한 엔트리 포인트 (스레드)가 하나만 있습니다.

+0

이러한 데이터는 데이터를 표시하지 않도록 충분히 민감합니다 그러나, 그것은 작동 할 것이다. 그러나이 경우에 나는 기울인다. –