2012-11-13 5 views
1

2 대의 전화기에서 실행되는 서비스가 있습니다. 소켓을 사용하여 서로 통신하고 스크립트 (약 1 ~ 2 분 소요)를 실행하고 HTTP POST를 사용하여 파일을 교환합니다.서비스의 Wakelock 구현

화면이 꺼져 있어도 Wakelock을 획득하더라도이 실행을 계속하고 싶습니다. 나는 this link을 보았지만,이 코드를 어디서 통합 할 것인지는 잘 모르겠습니다. (디바이스가 실행 중간에 잠들 수도 있습니다.) 모든지도 매우 감사합니다. 고맙습니다.

+0

"소켓을 사용하여 서로 통신하고 (약 1-2 분이 걸릴 수 있습니다) 스크립트를 실행하고 HTTP 포스트를 사용하여 파일을 교환합니다." - 그리고이 작업을위한 방아쇠 메커니즘은 무엇입니까? – CommonsWare

+0

2 개의 휴대 전화에 동일한 앱을 사용하고 있습니다. onCreate()에서 포트를 수신하는 서비스를 시작합니다. phone1의 버튼을 클릭하면 Phone2에 파일의 HTTP Post가 전송되고 통신은 계속 진행됩니다 (전화기 2는 처음 포트에서 청취 함). @CommonsWare – user1741274

답변

2

휴대 전화 2 대에 동일한 앱을 사용하고 있습니다. onCreate()에서 포트를 수신하는 서비스를 시작합니다. phone1의 버튼을 클릭하면 Phone2에 파일의 HTTP Post가 보내지고 통신은 계속 진행됩니다 (전화기 2는 처음 포트에서 청취 함).

음, 전화 번호 2에 배터리가 부족하기 때문에 phone2의 소유자가 초승달 모양으로 나를 공격하게 만드는 것 같습니다.

즉, HTTP 데몬은 WakeLock (아마도 WifiLock, 대부분의 모바일 데이터 연결에서 작동하지 않으므로)을 획득하고 출시하는 서비스에 있어야합니다.

WakefulIntentService은 특정 작업을 완료하기 위해 잠시 동안 WakeLock을 유지해야하는 합리적인 시나리오를 위해 설계 되었기 때문에 여기서는 유용하지 않습니다. 귀하의 경우, 작업을 완료해야 할 때가 언제인지 모르므로 귀하는 WakeLock을 무기한 보관해야합니다.

어디서 코드를 통합 할 것인지 잘 모르겠습니다.

아마도 서비스에서. 서비스의 onCreate()WakeLock을 획득하고 서비스의 onDestroy()에서 해제하십시오. 초승달과 관련된 사망을 피하려면이 서비스가 실행되는 시점을 사용자가 정확히 제어 할 수 있어야하므로이 WakeLock이 시행되는 시점을 충분히 제어 할 수 있습니다.

+0

상세한 설명 주셔서 감사합니다. @ CommonsWare – user1741274

+0

나는 자력 잠금 장치와 wi-fi 잠금 장치를 추가했습니다. 화면이 잠긴 후 (Logcat에서 로그를 볼 때) 잠시 후 (예 : 5 분) 서비스가 실행됩니다. 나는 부분적인 wakelock을 얻었다. 이것은 예상되는 행동입니까? @CommonsWare – user1741274

+0

@ user1741274 : "예상되는 동작입니까?" - 나는 당신의 코드를 작성하지 않았기 때문에 전혀 몰라요. – CommonsWare

1

왜 서비스로 해당 기능을 구현하지 않습니까? here을 참조하십시오. 나는 안드로이드 개발에 경험이 없지만 비슷한 기능이 서비스를 사용하여 구현 된 프로젝트에서 최근에 일했습니다.

+0

예 (UI의 버튼을 클릭하면 시작되는) 서비스로 구현됩니다. 1 호선을보십시오. @rmcc – user1741274

+0

그래서 문제가 무엇인지 정확히 이해하지 못합니다. 서비스가있는 경우 화면이 꺼져있을 때 왜 계속 작동하지 않습니까? – rmcc

+0

전화 1에서 내 서비스가 시작되어 인 텐트 (파일에서 일부 스크립트를 실행 함)를 호출하고 브로드 캐스트를 사용하여 완료 후에 알립니다. 이 서비스에 정의 된 onReceive() 메소드에서 II 폰에 업데이트 된 파일을 게시하고 있습니다. @rmcc – user1741274