2011-12-28 3 views
1

Service으로 신청할 수 있습니다. 이 서비스는 worker Thread을 시작하며이 스레드는 Service 인스턴스 (이 서비스의 일부 메소드를 호출)에 대한 포인터가 필요합니다. Android : 서비스에 대한 포인터를 얻는 방법?

지금 난 그냥 내 자신의 Runnable 생성자에 ServiceonCreate() 방법에서 this 포인터를 전달,하지만 난 내 응용 프로그램을 닫을 때까지 올바르게 작동합니다. 응용 프로그램을 다시 시작하면 포인터가 실제로 잘못되었습니다. 나는 아직도 무엇이 잘못되었는지 알 수 없다. 그러나 Service의 인스턴스에 대한 포인터가 Service의 또 다른 인스턴스를 가리키는 포인터이며, 내 Runnable에 대한 포인터도 잘못되었다고 생각된다.

내 내 앱을 죽인 다음에 다음 번에 제대로 작동하지만 다시 시작한 후에도 동일한 문제가 발생합니다.

나는 내가 서비스의 onCreate() 방법에서 this 포인터를 전달할 수 없다는 생각,하지만, 내가 어떻게 onCreate() 방법에서 시작하는 스레드에서 내 서비스의 인스턴스에 대한 포인터를받을 수 있나요?

업데이트 : 방금 정확히 동일하다고 생각했습니다. singleton issue. Runnable은 싱글 톤이었습니다. 하지만 여전히 안드로이드에서 싱글 톤을 사용하지 않는 것 외에는 좋은 해결책을 찾을 수 없습니다. 아마, 어떤 제안이라도?

답변

1

이 스레드는 Service 인스턴스 (이 서비스의 일부 메소드를 호출 함)에 대한 포인터가 필요합니다.

Java에는 포인터가 없습니다. Java에 해당하는 것은 "객체 참조"입니다.

난 내 응용 프로그램

안드로이드에서 "응용 프로그램"을 "닫기"와 같은 그런 개념이 없습니다 닫을 때까지.

나는 아직도 무엇이 잘못되었는지 알 수 없지만 Service의 인스턴스에 대한 포인터가 다른 Service 인스턴스를 가리키는 포인터이며 내 Runnable에 대한 포인터도 잘못되었습니다. 원래 Service을 중지하고 스레드를 유출하는 경우, 저명 가능하다

는 다시 Service을 시작했다. 당신은 두 스레드로 상처를 입었을 것입니다. 하나는 귀하의 Service 사본이 없습니다.

어떻게하면 onCreate() 메서드에서 시작하는 스레드에서 내 서비스의 인스턴스에 대한 포인터를 얻을 수 있습니까?

귀하의 문제는 아닙니다. 당신의 문제는, 그것이 무엇이든간에, 다른 곳에 있습니다.

+0

감사합니다. 죄송합니다 잘못된 용어지만, "응용 프로그램"에 대한 : 시스템 설정에서 나는 정확히 "응용 프로그램 관리"로 갈 수 있고, 멈출 수 있습니다 (예, 닫기지만, 멈추지 만) 제 설치 한 "응용 프로그램". 나는 적당한 기간이 활동 일 것이라고 생각하니? 그리고 다시 확인해보고 싶습니다. 일반적으로 Service.onCreate()의 무언가에 this 참조를 전달할 수 있습니까? –

+0

@dimonomid : "시스템 설정에서 정확히"응용 프로그램 관리 "로 갈 수 있으며, 설치 한"응용 프로그램 "을 멈출 수 있습니다. - 사용자는 일반적으로이 작업을 수행하지 않습니다. "이 참조를 Service.onCreate()의 무언가에 전달해도 괜찮습니까?" - 일반적으로 그렇습니다. – CommonsWare

+0

나는 사용자가이 작업을 수행해야한다고 말하지 않고 "app"용어를 사용한 이유를 설명하려고했습니다. 음, 버그를 발견했습니다. 다시 한 번 감사드립니다 : 싱글 톤 문제가있었습니다. 내 질문을 업데이트했습니다.이 업데이트를 살펴보고 뭔가 제안 할 수 있습니까? –

관련 문제