나는 큰 이진 블록을 수신하고 그것을 유용한 Java 객체로 파싱하는 Network Client 클래스를 가지고있다. 네트워크 클라이언트는 앱의보기와 별도의 스레드에 있습니다. 이 객체를 View에서 사용할 수있게하는 가장 좋은 방법은 무엇입니까? 나는 다음과 같은 해결책을 왔어요,하지만 그들 중 누구도 같은 느낌은 정확 하나입니다 :Android에서 활동 내에서 큰 객체를 공유하려면 어떻게해야하나요?
- 가 직접 가
-
가
- 에게 내가 보낼 것 보기 액세스 네트워크 클라이언트에서 개체를 만들고하자 보기에 데이터가 업데이트되었음을 알리는 처리기의 작은 메시지
- 단점 :보기가 액세스하는 동안 네트워크 클라이언트가 개체를 대체하지 못하도록 스레드간에 개체를 동기화해야합니다.
- 직렬화 (? 소포) 네트워크 클라이언트에서 개체 및보기에 처리기를 통해 전송하는
- 프로 :
- 콘 데이터의 소유권의 어떠한 질문이 없습니다 : 아마에 큰 성과 드레인 것 응용 프로그램
- 는 개체에 대한 참조를 만들고 난 C++ 배경에서 오는보기
- 에 그 전달하고,이 자바로도 가능하다 있는지 확실하지 않습니다. 난 C + +, 난 그냥 개체에 포인터를 보내고 그것을 돌볼 수 있습니다. 자바가 저에게 허락하지 않는 것처럼 보입니다. 이것이 가능한가?
이러한 솔루션 중 어느 것이 좋습니다인가, 아니면 완전히 다른 방식으로 문제를 접근해야합니까?
많은 생각을하지 않은 것은 매우 좋은 질문입니다. 네트워크 클라이언트가 서비스가되어야한다고 생각합니다. 내가 백그라운드에서 다운로드하지 않는다면, 내가 듣고있는 소켓은 앱이 다시 시작될 때 이전 데이터로 완전히 채워질 것입니다. 네트워크 클라이언트를 서비스로 전환 할 것이므로 활동과 공유하고 싶은 모든 데이터를 올바르게 구분해야합니다. 대체 방법이 없나요? – Topher
로컬 서비스를 사용하는 경우 getter 및 setter를 만들고 다른 객체와 마찬가지로 서비스와 통신 할 수 있습니다. 자세한 내용은 지역 서비스를 검색하십시오. – Janusz
내가 말했듯이, 그것은 달려있다. 동일한 프로세스에서 실행중인 경우 기본 구현은 데이터를 복사하는 대신 포인터를 전달하려고 시도합니다. –