센서에서 데이터를 수신하고 처리하는 Android 애플리케이션이 있습니다. 여기에는 하나의 기본 활동 클래스와 하나의 서비스 클래스가 포함됩니다. 서비스 클래스는 백그라운드에서 실행되어 센서에서 데이터를 수신하고 저장합니다. 액티비티 클래스에는 최대 100 일 전 일일 평균 값을 보여주는 기록 차트가 있습니다. 활동이 실행 중이 지 않을 때에도 서비스는 백그라운드에서 데이터를 계속 수신해야하기 때문에 활동과 서비스의 수명주기는 독립적이어야합니다.액티비티와 서비스간에 동적 배열 목록 공유
여기 현재 구현됩니다. 액티비티가 서비스의 데이터에 액세스 할 수 있도록 공유 환경 설정을 사용합니다. 새로운 데이터가 도착할 때마다 서비스는 데이터를 arrayList에 저장 한 다음 arrayList를 json으로 serialize하고 json을 공유 환경 설정에 저장합니다. 이것은 새로운 데이터를 저장하고 싶을 때마다 json 배열 전체를 기본 설정에서 가져 와서 deserialize하고 데이터를 추가 한 다음 json 배열을 다시 가져와야하기 때문에 그리 효율적이지 않습니다. 역 직렬화를하지 않고 json 배열 문자열에 새로운 json 객체를 추가하는 방법이있을 수도 있지만 어떻게 계산하지 못했는지 알고 있습니다. 그러나 이것이 가능하더라도 여전히 json 배열 전체가 여전히 기본 설정에서 검색되어야하고이 로컬 객체에 메모리를 할당해야하기 때문에 여전히 효율적이지 않다고 생각합니다. 또한 그래프를 업데이트 할 때 전체 json을 deserialize해야합니다.
그래서 배열 필드를 서비스 필드로 유지하고 기본 활동이이 필드에 직접 액세스하게하는 방법이 있는지 생각하고 있습니다. 나는 많은 검색을했지만 좋은 해결책을 찾지 못했습니다. 이것은 바보 같은 질문이 들리 겠지만 필자는 안드로이드를 처음 접했을 때 도움이된다. 또한 어떤 구현이 선호되는지 궁금하다. 더 좋은 해결책이 있다면? 모든 도움에 감사드립니다.
감사합니다 @ Shivam Verma, 당신의 대답은 매우 도움이됩니다! 당신이 말했듯이 방송 수신기를 사용하여 최신 독서를 업데이트했습니다. 그러나 방송 수신기가 일시 중지되면 등록이 취소 된 경우 onCreate() 대신 onResume()에 fetchValueFromDb()를 넣어야합니까? 따라서 앱이 백그라운드에있을 때 새로운 데이터가 도착하면 앱이 포 그라운드로 다시 갈 때 그래프에 즉시 반영 될 수 있습니다. – wwan
아 예! 그게 더 좋을거야. 당신은 아이디어가 있어요 :) –
실제로 내가 방금 실행 한 또 다른 문제는 어떻게 활동과 서비스 사이에 sqlite 데이터베이스를 공유해야합니까? sqliteopenhelper singleton 만들기, 어디에서나 액세스 할 수있는 도우미 인스턴스를 시작하기 위해 Application 클래스 확장 또는 같은 응용 프로그램 컨텍스트로 별도의 도우미 인스턴스 만들기와 같은 여러 솔루션에 대해 사람들이 이야기하는 것을 보았습니다. 어떤 솔루션이 가장 잘 작동하는지 궁금합니다. – wwan