1

나는 2 개의 출처로부터 온라인으로 자료를 얻을 필요가 있고 나는 그렇게하는 것처럼 각각의 진전 상황을 보여주고 싶다. 데이터가 수집되면 목록 뷰를 채울 수 있습니다.Android 로더를 데이지 체인 방식으로 연결하는 것은 좋지 않은 생각입니까?

현재 MyActivity는 MyDataLoader (AsyncTaskLoader를 확장하는 클래스)의 인스턴스를 만드는 LoaderCallbacks를 구현합니다. MyDataLoader의 loadInBackground 메서드에서 모든 소스의 데이터를 가져 와서 Sqlite db를 채 웁니다. 이 db는 전체적으로 사용할 수 있습니다.

문제는 내가 처리 과정에서 사용자에게 어떤 피드백도 제공하지 않는다는 것입니다.

그래서 필자는 getLoaderManager(). initLoader를 사용하여 로더를 데이지 체인 방식으로 연결하는 방법을 생각해 내 로더를 만든 다음 loadermanager의 로더를 한 번에 하나씩 반복합니다. 각 로더가 끝나고 onLoadFinished로 돌아 가면 진행 상황을 나타내는 progressDialog 텍스트를 설정할 기회가 있습니다.

이것은 나쁜 생각입니까? 더 간단하고 좋은 방법이 있습니까?

답변

2

그것은 별도의 스레드에 백그라운드에서 Loader의 데이터를로드는 ... 데이터가 "순차적"로드되지 않기 때문에 불가능하고, 따라서 onLoadFinished에서 진행 상황을 보여주는 것은 당신에게 실제로 이루어지고 얼마나 많은 진전의 정확한 사진을 제공하지 않습니다 .

모든 사용자는 데이터가 백그라운드에서로드되고 있다는 것을 알아야합니다. 전체 대화 상자를 시작하는 것조차 조금 지나치게 길고 내 생각에 사용자 경험을 혼란스럽게합니다. 내 머리 꼭대기의 두 가지 대안은 다음과 같습니다.

  1. 레이아웃 또는 작업 표시 줄에 불확정 진행 아이콘을 표시합니다.

  2. 레이아웃의 가운데에 Loading...이라고 표시된 회색 처리 된 TextView을 표시합니다. TextView은 데이터가 웹에서 검색되어 화면에 표시 될 준비가되면 숨겨집니다. Google에서 만든 여러 앱에서 Google 애널리틱스와 같은 옵션을 선택합니다.

+0

Throbbers는 항상이 작업을 수행하는 편리한 방법이지만, 미리로드를 수행해야한다는 것을 알고 있다면 '0 %'/ '50 %'/ '100 %'표시는 반드시 필요하지는 않습니다. 나쁜 생각. 즉, 리소스를 순차적으로로드 할 이유가 없습니다. – Basic

+0

@alex, 완료되면 각 로더가 onLoadFinished 메서드를 개별적으로 호출합니까? 아니면 단일 호출이 있습니까? 아니면 모든 로더가 완료되면 다른 방법으로 최종 호출이 있습니까? – CarllDev

+0

@CarllDev 로더는 완전히 독립적입니다. LoaderManager는 로더가로드를 완료 할 때마다 (onLoadFinished)이 호출됩니다 (이 'Loader'는 메소드의 첫 번째 인수로도 전달됩니다). 'LoaderManager'는 전체 라이프 사이클에서'Activity'의 Loader를 지속적으로 시작/정지/재설정/제거하므로 로더의 모든 *로드가 끝났을 때 다시보고하는 콜백 메서드를 사용하면 아무런 의미가 없습니다 . –

관련 문제