안녕하세요...
지금 일정한 시간간격으로 서버에 파킷을 전송하고 있습니다.
그것을 처음에는 스레드에서 .loop를 돌리고
mHandler.sendEmptyMessageDelayed(CHK_KEEPALIVE, KEEPALIVE_TIMEOUT * 1000);
이것으로 시간간격으로 이벤트를 발생시켜 파킷을 전송하였는데 폰을 콤에 연결하고 실험하면 서버에 파킷이 제대로 올라 옵니다.
(절전모드이건 상관없이...)
그런데 케블을 뽑고 하면 화면이 켜진상태에서는 제대로 파킷이 올라가는데 절전모드상에서는 파킷이 올라오지 않습니다...
그리하여 이벤트 문제인가하여 스레드에서 슬립을 주어 파킷을 전송하도록 하였습니다.
@Override
public void run() {
/*Looper.prepare();
mHandler.sendEmptyMessageDelayed(CHK_KEEPALIVE, KEEPALIVE_TIMEOUT * 1000);
mLoop = Looper.myLooper();
Looper.loop();*/
int keepTime = 0;
while(!bExit)
{
Log.e("Send Keep Alive", "Keep Alive");
sendKeepAlive();
}
try {
Thread.sleep(SEND_TIMEOUT * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
그런데도 절전모드에서는 파킷이 전송되지 않았습니다.
절전모드에서 깨여나면 파킷이 전송되고....
이것이 절전모드에서 스레드가 suspend되는것일가요 아니면 파킷 전송이 않되는것입니까?(Udp소켓입니다)
그리고 절전모드에서 이벤트를 일으키면 사건이 먹지 않는가요?
mHandler.sendEmptyMessageDelayed(CHK_KEEPALIVE, KEEPALIVE_TIMEOUT * 1000);
이것때문에 고심이 많아요....
꼭 답변 부탁드립니다....
절전모드는 말 그대로 폰이 돌아가야 하는데 있어 필수적인 기능을 제외한 나머지 기능은 정지되는겁니다..사용자가 설치한 앱은 그 순위에서 젤 나중으로 밀리는거죠..만드는 앱의 성격이 어떤건지를 몰라서 말씀드리긴 어렵습니다만..폰이 절전모드였을때 동작을 안하면 사용자에게 큰 문제가 발생하는 그런 앱이 아니라면 그건 내비두는게 맞다 봅니다..
절전모드가 뭘까요?
말그대로 전류소모를 줄이기 위해서 모드 인데요.
APP 이 돌고 있으면 절전모드가 소용이 없겠지요.
절전모드에서 APP 수행이 정지되는 것은 정상이구요.
APP에서 절전모드를 못 들어가게 막을 수는 있습니다. (꼭 필요한 것이라면...)
WakeLock 으로 찾아보세요.