안드로이드 개발 질문/답변
(글 수 45,052)
앞전에 질문글을 올렸었네요...
서비스가 메인스레드에서 구동되는지 몰랐네요...
무튼 제가 구현한 서비스는 mqtt를 이용한 푸시 서비스 인데요....
tcp/ip 접속 방식이라 네트웍이 변경되면 ip를 재전송하여 접속을 유지해야 하는데요...
이때 기존 커넥션을 끊고 다시 재접속을 하게 됩니다....
근데 로그를 찍어보니 disconnect()부분에서 오랜 시간ㅇ ㅣ걸리길래 이 부분을
메인 스레드가 아닌 별도의 스레드로 돌리고 싶어서 아래와 같이 구현 하였습니다...
// Disconnect
public void disconnect() {
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
try {
stopKeepAlives();
mqttClient.disconnect();
} catch (MqttPersistenceException e) {
log("MqttException" + (e.getMessage() != null? e.getMessage():" NULL"), e);
}
}
};
Thread thread = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
};
thread.start();
}
이렇게 하면 별도의 스레드로 돌아가는 것 아닌가요...? 이렇게 바꾸어도 똑같이 메인스레드는 멈추네요...
위 작업이 끝날 때까지...ㅠ 저위에 볼드체인 mqttClient.disconnect(); 가 가장 오래 걸리는 부분입니당....ㅠ_ㅠ
서비스가 메인스레드에서 구동되는지 몰랐네요...
무튼 제가 구현한 서비스는 mqtt를 이용한 푸시 서비스 인데요....
tcp/ip 접속 방식이라 네트웍이 변경되면 ip를 재전송하여 접속을 유지해야 하는데요...
이때 기존 커넥션을 끊고 다시 재접속을 하게 됩니다....
근데 로그를 찍어보니 disconnect()부분에서 오랜 시간ㅇ ㅣ걸리길래 이 부분을
메인 스레드가 아닌 별도의 스레드로 돌리고 싶어서 아래와 같이 구현 하였습니다...
// Disconnect
public void disconnect() {
final Handler handler = new Handler() {
@Override
public void handleMessage(Message message) {
try {
stopKeepAlives();
mqttClient.disconnect();
} catch (MqttPersistenceException e) {
log("MqttException" + (e.getMessage() != null? e.getMessage():" NULL"), e);
}
}
};
Thread thread = new Thread() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
Thread.sleep(200);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
handler.sendEmptyMessage(0);
}
};
thread.start();
}
이렇게 하면 별도의 스레드로 돌아가는 것 아닌가요...? 이렇게 바꾸어도 똑같이 메인스레드는 멈추네요...
위 작업이 끝날 때까지...ㅠ 저위에 볼드체인 mqttClient.disconnect(); 가 가장 오래 걸리는 부분입니당....ㅠ_ㅠ



