2012-11-25 5 views
1

퀴즈 앱이 처음 시작될 때 데이터베이스에 질문을 추가해야하며 몇 초가 걸립니다. 이 상황이 발생하는 동안 indeterminate progressbar 표시 싶습니다. 질문이 추가되면 클래스는 finish()를 호출하고 기본 화면으로 이동합니다. 문제는 finish가 호출되지 않으면 레이아웃이 그려지지 않는다는 것입니다. 나는 oncreate와 onstart가 호출 될 때까지 XML 레이아웃을 그리지 않는다고 가정합니다. 그럼 어떻게이 문제를 해결할 수 있을까요?안드로이드 레이아웃이 표시되지 않습니다

답변

1

DB를 채우는 동안 UI가 표시되지 않는 이유는 응용 프로그램의 기본 스레드 인 UI 스레드에서이를 수행하고 있기 때문입니다. 스레드가 DB를 가득 채우고 있기 때문에 UI를 표시하거나 진행 표시기에 애니메이션을 적용하거나 사용자 동작에 반응 할 시간이 없습니다.

따라서 항상 시간이 많이 걸리는 작업을 별도의 스레드에서 실행해야합니다. 자세한 내용은 안드로이드 devloper의 블로그에 대한 고통 스레딩이 우수한 항목을 참조 바로 그것을 할 : 나는 AsyncTask를 구현해야 볼

+0

감사합니다. 나는 정말로 이것을 모두 깨닫지 못했다. 링크 된 기사는 정말 흥미 롭습니다. 내 데이터베이스와 sharedpreferences에 여전히 액세스하면서 비동기를 구현하는 방법을 찾을 수있는 곳이 있습니까? – AndroidPenguin

+0

작동 방법을 알아 냈습니다. 당신들 둘 다 똑같은 말을했지만 당신은 더 많은 정보를주었습니다. 감사합니다 :) 정말 도움을 주셔서 감사합니다! – AndroidPenguin

1

AsyncTask을 사용하고 onPreExecute에 진행률 대화 상자를 표시하고 onPostExecute을 닫으면 db를 doInBackground으로 준비하십시오.

DialogFragment를 사용하여 대화 상자를 표시하지 않는 한 장치 회전을 처리해야합니다.

+0

합니다. 나는 설명서를 읽었지만 SQLite 데이터베이스에 액세스하고 쓰는 방법을 잘 모릅니다. 너 어떤 통찰력을 줄 수 있니? – AndroidPenguin

+0

@ user1676486 UI를 건드리지 않는 한 SQL 또는 다른 연산을 doInBackground()에 넣을 수 있습니다. –

관련 문제