1

오케이 너무 앞에서 나는 내가 안드로이드에 처음이라고 말할 것입니다. 몇 가지 작은 프로젝트를 만들었고 몇 가지 작업을 해보았으며 몇 톤의 독서를 마쳤습니다. 그래서 여기에 내가 달성하려고하는 작업이 있습니다 :브로드 캐스트, ContentProviders 및 ContentRecievers에 대한 모범 사례

나는 WiFi 네트워크를 통해 다른 안드로이드 장치와 정보를주고받을 수있는 나의 전화의 전경에서 실행되는 원격 서비스를 가지고 있습니다. 이 서비스를 사용하기 위해 만들어진 APK의 전화기에는 여러 개의 SQLite DB가 있습니다. 이 APK가 콘텐츠 제공 업체에 서비스를 등록하여 서비스가 항상 데이터 수신 위치를 알 수 있도록 (이 작업을 완료했습니다) 데이터가 들어 오면 해당 DB가 속한 위치를 식별하고 올바른 DB에 배치합니다 (여기에 문제 없음). 따라서 올바른 활동에 새로운 데이터가 수신되었다는 것을 알리는 가장 좋은 방법은 무엇입니까? 내 서비스가 전화를 걸기 위해 브로드 캐스트 수신기를 등록합니까? APK가 OS에 의해 사망 ​​한 경우 브로드 캐스트 수신기가 작동합니까? 올바른 활동이로드되면 콘텐츠 관찰자를 사용하여 새 데이터를 표시합니까? IntentServices를 사용해야하는 이유는 무엇입니까?

많은 질문에 사과드립니다. 내가 빨리 배우고 있다고 말했듯이, 안드로이드의 SKD는 방대하고 많은 멋진 것들이 있습니다. 나는 베스트 프랙티스를 통해 올바른 일을 생각하고 이것을 매우 쉽게 유지 보수하고 확장 할 수있게 만들고 싶습니다. 도움이나 조언을 주셔서 감사합니다.

답변

4

응답이 ContentObserver 인 경우보다 현재 읽고있는 ContentProvider에서 데이터가 변경되었음을 알 수있는 가장 좋은 방법은 무엇입니까?

예를 들어 Activity 및 ContentProviders 집합이 있다고 가정 해 보겠습니다. Activity A는 컨텐츠 제공자 A의 항목 목록보기이며 해당 목록보기는 일종의 CursorAdapter를 통해 채워집니다. ContentProviders CONTENT_URI에 대한 쿼리가있을 때마다 커서는 ContentObserver를 통해 CONTENT_URI를 자동으로 모니터링해야합니다. 이 작품

이유 때문에 컨텐트 프로에 있습니다

  1. 조회 방법은 쿼리 된 URI에 커서에 setNotificationUri를 호출합니다.
  2. 삽입/업데이트/삭제 메소드에서 변경이 발생할 때마다 URI에서 notifyChange를 호출합니다.

데이터를 전달하는 방법에 대한 몇 가지 선택이보다는 컨텐트 프로에 연결되지 않은 서비스에서 변경할 수있는 추가 데이터가있는 경우. 활동이 서비스와 동일한 APK에 있으면 일종의 정적 변수 나 응용 프로그램 컨텍스트 또는 기타 사용자 정의 통신 형식을 사용할 수 있습니다. 동일한 VM에서 실행 중이기 때문에이 방법은 다소 진보적이므로 많은 것을 사용할 수 있습니다.

대부분의 활동이 별도의 APK에있는 것처럼 보일 수도 있습니다. 그렇다면 브로드 캐스트 인 텐트 (Infent)를 보내어 전체 시스템이 변경 사항을 알 수있게하려는 것입니다. 이러한 변경 사항은 활동이 실행 중일 때만 중요합니다. 변경 사항을 염두에 둔 활동 기간 동안 BroadcastReceiver를 등록 할 수 있습니다. 또는 BroadcastReceiver를 응용 프로그램 매니페스트에 넣고 항상 해당 변경 사항을 수신 할 수 있습니다.

이렇게하면 IntentServices가됩니다. IntentServices는 Android에서 장기 실행 작업을 처리하는 "가장 쉬운"방법입니다. 그들이하는 일은 인 텐트가 서비스로 보내지는 것을 처리 할 백그라운드 스레드를 만드는 것입니다.다음과 같이 일반적인 사용 사례는 다음과 같습니다

  1. 당신은 당신이 (그리고 시간이 걸릴 것)에 반응 할 필요가 방송 의도를받을
  2. 에 (세트 구성 요소 이름 의도) 감독이 의도 보내기 IntentService에 브로드 캐스트 인 텐트의 일부 정보가 있습니다.
  3. IntentService 새로운 BG 스레드를 생성합니다, 또는 onHandleIntent 기능은 IntentService에서라고
  4. 기존 BG 스레드에서 처리 큐에 의도를 추가하거나 당신만큼 처리 시간을 사용하여 변경 과정을 지금 할 수 있도록 필요.
+0

감사합니다. 나는 CP와 CO의 최신 정보를 가지고 있었다. BR과 CI에 대해 확실하지 않았습니다. 따라서 APK의 Manifest 파일에 정의 된 브로드 캐스트 리시버를 사용하면 실행중인 APK가 아니더라도 APK가 브로드 캐스트를 수신 할 수 있습니다. 그 모든 것이 멋지게 만들고 필요한 방식으로 작동하도록 디자인을 결정하는 것은 저의 문제가 아닙니다. – jjNford

+0

질문하는 것을 두려워하지 마십시오 ... 이런 종류의 디자인은 제가 연구중인 주요 프로젝트와 매우 유사합니다. –

+0

고마워요, 끝내 주네. "사내 응용 프로그램"을 디자인하려고합니다. 지금은 응용 프로그램과 같은 프레임 워크를 만들려고합니다. 원격 인터페이스에 대한 모든 IPC를 처리하기 위해 jar 인터페이스 파일을 제공합니다. APK는 내 인터페이스를 사용하여 ContentProviders 및 Message ID를 등록합니다. 나는 새로운 메시지가 전화 상에 수신되었을 때 그것을 올바른 ContentProvider에 추가하고 메시지 유형을 사용하는 활동에 통지를하기 때문에 (그래서 BroadcastReceivers를 등록하고 브로드 캐스트를 동적으로 생성해야 함) 필요합니다. 어떤 조언이 도움이됩니다! 고맙습니다! – jjNford