2010-03-27 2 views
2

나는 세 개의 탭이 정의 된 TabActivity입니다. 첫 번째 탭은 가볍고 허용되는 시간 내에 렌더링됩니다. 그러나 두 번째 탭과 세 번째 탭을 클릭하면 시각적으로 렌더링되기까지 몇 초가 걸립니다. 첫 번째 탭을로드 한 후 프리 캐시를위한 백그라운드에서 시작하려고합니다. 로드가 완료되면 빠르게 전환 할 수 있습니다.프리 캐시를위한 모든 탭의 활동 시작

그래서 두 번째 및 세 번째 탭을 시작할 수 있는지 궁금합니다. 그들은 액티비티에로드되었습니다.

답변

2

1 단계 : 탭의 내용으로 사용되는 모든 활동을 제거하십시오.

2 단계 : Views (TabHost 활동에 대한 기본 레이아웃 파일에 FrameLayout의 하위) 하위 요소로 다시 작성하고 작동 시키십시오. 탭 내용으로 활동을하면 오버 헤드가 추가되어 의미있는 이점을 얻을 수 없습니다. 즉 성능 향상의 부족하면

, 다음 ...

단계 # 3 : 별도의 레이아웃 파일로 두 번째와 세 번째 탭을 이동합니다. onCreate()에 풍선을 띄우고 붙잡아 두십시오 (TabHost에 부착하지 마십시오). 탭 사양을 추가 할 때는 TabContentFactory을 사용하고 미리 공장에 Views을 붙이십시오.

즉 단순히 onCreate()로 성능 문제를 이동하는 경우, 다음 ...

단계 # 4 : 팽창 및 배경 스레드에서 그보기를 설정하십시오. 안드로이드가 백그라운드 스레드에 대한 UI 작업을 좋아하지 않기 때문에 이것은 단지 날아갈 수 있습니다. 그것이 작동하더라도, 당신이 일을 끝내기 전에 사용자가 두 번째 탭을 클릭 할 가능성을 다루기 위해 영리해야합니다.

또는, 탭을 수행하려고하는 모든 작업의 ​​속도를 향상시킬 수 있으므로 적어도 처음에는 시간이 많이 걸리지 않습니다.

+0

1 단계와 2 단계를 수행했습니다. 3 단계가 필요하지 않습니다. 내보기가 느리거나, 어댑터가 시간을 계산하는 속도가 느려서 필요하지 않습니다. 런타임에 테스트 할 때 (디버그 없음) 5-7 초 걸립니다. 내 어댑터가 비어 있으면로드 시간이 짧습니다. – Pentium10

+0

그런 다음 배경 스레드 *에서 어댑터를 만들지 만 준비가 될 때까지 'ListView'에 연결하지 마십시오. 어댑터는 ListView (또는 다른'AdapterView')에 연결될 때까지'Views'를 실제로 생성하지 않으므로 백그라운드에서 사용하기에 안전합니다. 사용자가 아직 어댑터가 준비되지 않은 탭 (예 : 'ProgressDialog')을 탭하는 경우를 처리해야합니다. – CommonsWare

+0

잘 작동하는 스레딩 작업을 수행했는데 이제는 진행 대화 상자를 수행하고 있으며 ListViews의 빈 텍스트와 함께 사용합니다. – Pentium10