2016-08-24 2 views
1

사용자로부터받은 보고서 중 하나를 조사 할 때 절전 모드가 활성화되어 있으면 (Nexus 4, Android 5.1.1) 얼마 후에 다운로드 데이터가 연결 예외가되는 것으로 나타났습니다 . 이것은 장치 화면이 꺼져있을 때 발생하며 화면을 켠 상태에서 테스트하지 않았습니다. 있다절전 모드의 네트워크 연결

PowerManager.PARTIAL_WAKE_LOCK과 작업 중에 WifiManager.WIFI_MODE_FULL 모두를 누르고 있습니다. 나는 연결을 위해 OkHttp를 사용하고 있으며 Wifi는 항상 켜져 있습니다.

그런 상황에서 두 가지 잠금 (wifi 및 partial_wake)을 모두 보유한 경우 외에 어떤 조치를 취할 수 있습니까? 사용자가 이러한 연결을 작동시키는 것이 중요합니다.

스택 트레이스는 - 그것은 여기 정말 관련이없는하지만 내 생각 :

W/System.err: java.util.concurrent.ExecutionException: java.net.ConnectException: Failed to connect to ************* 
W/System.err:  at java.util.concurrent.FutureTask.report(FutureTask.java:93) 
W/System.err:  at java.util.concurrent.FutureTask.get(FutureTask.java:177) 
.... 
W/System.err: Caused by: java.net.ConnectException: Failed to connect to ************** 
W/System.err:  at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:139) 
W/System.err:  at okhttp3.internal.io.RealConnection.connect(RealConnection.java:108) 
W/System.err:  at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188) 
W/System.err:  at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127) 
W/System.err:  at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97) 
W/System.err:  at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289) 
W/System.err:  at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241) 
W/System.err:  at okhttp3.RealCall.getResponse(RealCall.java:240) 
W/System.err:  at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198) 
W/System.err:  at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160) 
W/System.err:  at okhttp3.RealCall.execute(RealCall.java:57) 
... 

편집 :이 와이파이 및 모바일 데이터를 모두 연결을 발생합니다. 또한 깨우기 잠금이 유지되고 있으며 연결이 불가능하다는 사실을 제외하고는 모든 것이 정상적으로 작동하는 것으로 확인되었습니다. 화면이 켜지면 모든 것이 정상적으로 작동하지만 화면을 켜놓는 것은 용인 할만한 해결책이 아닙니다.

답변

2

언급 한대로 - 이는 절전 모드 때문일 수 있습니다. 이 모드에서 시스템은 깨우기 호출 수를 최소화하고 불필요하다고 판단되는 모든 프로세스를 중지합니다.

운 좋게도 Android는이를 처리 할 수있는 방법을 예상합니다. 이는 전경 서비스 (Foreground Service)입니다. 서비스가 포 그라운드로 시작되면 사용자 활동으로 간주되며 리소스가 부족한 경우 제거 대상이되지 않습니다.

당신은 전경에 모든 중요한 활동을 이동하는 것을 고려하고 입력을 배경 서비스에 (분석 예를 들어)

+0

감사를 모두 지원 모듈을 남길 수 있습니다. 사실 내 서비스가 전경 서비스라고 언급하는 것을 잊었습니다. 전경 상태가 올바르게 처리되는지 살펴볼 것입니다. – mhenryk

+0

나는 당신의 대답을 올바른 것으로 표시하고있다. 문제는 더 자세하지만 사실상 전경 서비스는 여기에서 사용해야하는 모든 것이다. 문제는 내 서비스가 일부 시간 동안 포 그라운드에서 멈춘 것입니다 (다른 작업을 수행하는 동안 두 번째 또는 두 번째). 그런 다음 전경 상태로 돌아 왔습니다. Android에서 내 앱의 네트워크 액세스를 중지하기에 충분했습니다. – mhenryk