2010-12-01 6 views
8

여러 웹 서비스에 액세스하고 정보가 표시되는 여러 활동이있는 응용 프로그램에 가장 적합한 일반 디자인이 무엇인지 알아 내려고하고 있습니다.일반적인 응용 프로그램 디자인 (IntentService/ContentProvider/AsyncTask)

최신 Android 애플리케이션을 구현 한 방법은 다음과 같습니다. 웹 서비스에서 정보를 얻기위한 활동 요청을받는 IntentService이 있습니다. 내 Service은 요청의 상태 (시작/오류/완료)에 대해 ResultReceiver을 통해 활동을 알립니다. 웹 서비스를 호출하고 결과 (xml/json)를 가져 와서 파싱 한 다음 해당 정보를 ContentProvider (sqlite 데이터베이스로 백업)에 저장하고 ContentResolver을 사용하여 변경 사항에 대한 모든 알림을 보냅니다. 활동은 변경 사항에 대한 알림을받습니다 (일부는 ContentObserver을 사용하고 다른 사용자는 SimpleCursorAdapter을 사용하며 자동으로 통지됩니다).

이제 내 방식의 문제점 :

  • 내가 활동을 입력 할 때마다, 나는 위에서 설명한 방법을 통해 웹 서비스에서 정보를 요청하고 나는 그것을 채울, 특정 테이블의 모든 행을 삭제 새 정보 및 활동을 알립니다. 따라서 사용자가 뒤로 밀고 다시 들어가면 나는 전체 댄스를 다시합니다. 마지막 업데이트 된 시간 등 데이터베이스의 일부 필드를 추가해야한다고 생각합니다.하지만 정확히 어떻게 진행해야할지 모르겠습니다. 제안? 한 가지 대안은 알람을 사용하고 특정 간격으로 업데이트를 트리거하는 것입니다. 그러나 필자의 경우 명세서는 웹 서비스를 시작할 때마다 웹 서비스를 확인하도록 요구한다.
  • 웹 서비스를 호출하면 다른 뷰 (이전에 가져온 정보가 포함되어 있고 웹 서비스 호출이 완료 될 때까지 데이터베이스에있는)에 대해 불확실한 진행률 표시 줄이 표시되지만 사용자는 상호 작용을 시작할 수 있습니다 보기와 이것은 좋지 않습니다 (정보가 데이터베이스에서 사라질 수도 있음). 상호 작용을 사용 중지하는 방법은 없나요? ProgressDialog가 떠오른다.
  • 다른 활동으로 빠르게 이동하면 IntentService가 이전 웹 서비스 호출로 차단되고 최신 웹 서비스 호출에 도달하는 데 더 오래 걸립니다. 모든 웹 서비스에 대해 복수 IntentService을 만들 수 있지만 이것이 그 목적이라고 생각하지 않습니다.

내가 취한 접근 방식이 실제로이 특정 응용 프로그램에 가장 적합한 것은 아니라는 느낌이 들었습니다. 부분적으로은 Google I/O 애플리케이션에서 영감을 받았습니다 (업데이트 된 sqlite 필드 등 모든 것을 이해할 수 없었습니다). 한 가지 대안은 모든 활동에서 AsyncTasks를 사용하는 것이 었습니다. 그러나 다른 활동에서 액세스하려면 정보를 어디에 저장할 수 있습니까? Application의 목록에 있습니까? ID 관리는 어떨까요?

나는 당신의 의견/아이디어/제안에 정말로 관심이 있으며 어떻게하면 다음 응용 프로그램을 더 효율적이고 효과적으로 작동하게 할 수 있습니까?

답변

2

이 대화를 확인하셨습니까? http://www.youtube.com/watch?v=xHXn3Kg2IQE

좋은 영감의 원천이었습니다. 기본적으로 싱글 톤 클래스로 서비스 도우미 (귀하의 경우 의도 서비스에 대한 서비스 도우미)를 구축 할 것을 제안합니다. 진행중인 요청을 추적 할 수 있습니다.

이렇게하면 수행중인 모든 종류의 진행중인 백그라운드 작업을 추적하고 같은 종류의 다른 요청을 차단할 수 있습니다. 예를 들어, 활동을 종료하고 활동을 b로 입력하고 동일한 웹 서비스 질의를 요청하면 활동으로 인해 아직 진행 중임을 확인할 수 있습니다.

iosched 앱에서 본 것부터, 활동이 닫히면 가져 오기 결과가 손실되는 문제가 발생합니다. 결과는도 손실 될 수 있기 때문에

Log.w(TAG, "Dropping result on floor for code " + resultCode + ": " + resultData.toString());

내가 너무 AsyncTask를 사용하지 않는 것이 좋습니다 :

말한다 명확한 기록이있다.

그러나 토크와 슬라이드를 살펴보십시오.

+0

글쎄, 전에 프리젠 테이션을 보았고, 개발할 때 영향을 받았다. 그러나 나는 충분히 확신하지 못했기 때문에 나는 완전히 가지 않았다. 접근법에 대한 구현 세부 사항을 더 많이 볼 수 있다면 도움이 될 것입니다. 다른 오픈 소스 안드로이드 애플리케이션을 추천 해 줄 수 있습니까? 감사. –

+0

오픈 소스 예제도 찾을 수 없었기 때문에 처음부터 다시 구현해야했습니다. 그들이 말하는 것에 대한 예를 제공하지 않는다는 것이 아주 나쁜 ... – fedepaol

관련 문제