2010-12-30 6 views
1

시나리오 :Android 아키텍처 : 어디에서 커서를 보유해야합니까?

public class MyApplication extends Application{...} 

세 가지 활동, 개요, 목록 및지도,
동일한 데이터 표시 만/UX를 다른 UI를 제공한다.

데이터가 Contentprovider db로 공급되고 외부 응용 프로그램의 SyncAdapter,
부분으로 자주 업데이트됩니다.

ContentProvider의 데이터를 커서로 읽습니다.
커서가 db/Uri 변경 사항을 수신 대기하도록 cursor.setNotificationUri(),
을 수행하십시오.

1. MyApplication에서 커서를 누릅니다.
개요, 목록 및지도에서 MyApplication에 데이터를 요청합니다.
db 변경 MyApplication은 각 작업
에 대한 참조를 보유하고 MyApplication에서 데이터를 다시 요청하도록 알립니다.

alt2. 각 활동에 하나의 커서를 올립니다.
db 변경시 각 활동은 데이터에 대한 커서를 다시 쿼리합니다.

어디에서 커서를 가져야합니까?

+0

+1 질문. 안드로이드 아키텍처의 특성은 실제로 더 깊이 논의되어야 할 요점입니다. –

답변

1

비슷한 문제가 있지만 DB와 커서가 아니라 간단한 웹 요청 \ 응답이 있습니다.
곧 문제가 시작될 것입니다. 요청이 응답하는 중에 활동이 멈출 때가 있습니다. 나는 다음을 제안 :

  1. 은 기본 활동이 u'll 쿼리에 대한 커서를 포함 할 것과 을 상속합니다.
  2. 의 데이터가있는 수신기를수신자가 수신 대기로 시작하는 onResume에 채울 방법이 있는지 확인하십시오.
  3. 별도 스레드에서 데이터베이스 업데이트를 완료하면 모든 수신기에 알립니다.
  4. 수행 할 때 데이터가 DB에 있는지 확인하여 활동이 중단 되었기 때문에 브로드 캐스트에서 전화를받지 못했는지 확인하십시오.

기본적으로 u는 각 활동에 커서가 있지만, 표준이 아닌 다른 작업을 수행하지 않으면 코드로 관리 할 필요가 없습니다. 액티비티가 종료되면 커서를 처리하는 것을 잊지 마십시오.

+0

감사합니다. 귀하의 의견에 감사드립니다. 귀하의 답변을 기반으로 사용자 정의 응용 프로그램을 사용하고 있는지 확실하지 않습니다. AndroidOS가 활동의 수명을 끝내면 응용 프로그램은 여전히 ​​존재합니다. 응용 프로그램이 커서를 보유하고 있으면 우리는 한 번 쿼리하지만 활동에 대한 참조는 보유합니다.액티비티에 커서가 하나씩 있으면 DB 리소스를 더 많이 사용하지만 연결이 필요하지 않습니다. 응용 프로그램 <-> 활동이 존재합니다. 내 질문은 두 가지 접근법의 단점과 이점과 관련이 있습니다. – user77115

+0

'Application'은 영원히 살지 않는다고 가정하십시오. 실제 장치에서는 백그라운드 프로세스를 중단시키는 일부로 죽을 수도 있습니다. 예를 들어 전화가 걸려 오면 앱이 백그라운드로 들어갑니다. 앱이 다시 포 그라운드에 나타나면 (전화 통화가 끝났을 때) 앱 프로세스가 복원됩니다. 복원시'Application' 인스턴스가 다시 생성되지만, 상태를 처리하는 것은 오직 당신 만입니다. 'Application' 인스턴스 내에 필드가 있고 그 필드가 앱의 다른 부분에 의해 설정 되었다면, 이제 대신에'null'을 얻을 수 있습니다. –

관련 문제