활동에서 JMDNS 서비스를 자동으로 새로 고칩니다
-
13-12-2019 - |
문제
JMDNS 서비스를 백그라운드에서 자동으로 새로 고치려고합니다.시도 할 때 아무 일도 일어나지 않습니다 :
@Override
public void onDestroy() {
try {
hiNeighborService.unregisterListener(this);
this.unbindService(this.serviceConnection);
} catch (Exception ex) {
Log.e(LOG_TAG, "Exception occur during destroying the app.");
}
super.onDestroy();
}
@Override
public void onStart() {
/*new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
refreshServices();
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();*/
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
// This schedule a runnable task every 2 minutes
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
rebindService();
refreshServices();
}
}, 0, 1, TimeUnit.SECONDS);
super.onStart();
}
@Override
public void onRestart() {
/*new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
refreshServices();
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();*/
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
// This schedule a runnable task every 2 minutes
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
rebindService();
refreshServices();
}
}, 0, 1, TimeUnit.SECONDS);
super.onRestart();
}
@Override
public void onResume() {
/*new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
try {
refreshServices();
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}).start();*/
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
// This schedule a runnable task every 2 minutes
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
rebindService();
refreshServices();
}
}, 0, 1, TimeUnit.SECONDS);
super.onResume();
}
.
이것은 내 resfreshservices () 메소드입니다.
private void refreshServices() {
Log.i(LOG_TAG, "Refresh available neighbors...");
final List<Neighbor> activeNeighbors = this.hiNeighborService
.getActiveNeighbors();
Log.d(LOG_TAG, activeNeighbors.size() + " active neighbors are found!");
new Thread(new Runnable() {
public void run() {
Log.i(LOG_TAG, "refresh UI...");
try {
synchronized (activeNeighborsViewModel) {
activeNeighborsViewModel.clear();
for (Neighbor neighbor : activeNeighbors) {
NeighborViewModel vm = new NeighborViewModel(
neighbor);
vm.setNeighborUnreadCount(ConnectActivity.this
.getUnreadMessageCount(neighbor));
if (activeNeighborsViewModel.contains(vm)) {
activeNeighborsViewModel.remove(vm);
}
activeNeighborsViewModel.add(vm);
}
}
notifyServiceListChanged();
Log.i(LOG_TAG, "refresh completed!");
} catch (Exception ex) {
ex.printStackTrace();
Log.e(LOG_TAG, ex.toString());
}
}
}).start();
}
.
일반적으로 버튼을 클릭 할 때 호출이 발생하지만 i를 자동으로 사용할 수 있습니다.이 코드는 ResFreshServices ()를 호출하는 RESFRESH 버튼을 누르지 않으면 아무 것도하지 않습니다.나는 스레드로 그것을 시도하려고 시도했지만 활동은 닫히고 앱도 마셔야합니다.어떤 아이디어도 있습니까?
해결책
먼저 코드에 대해 약간의 코멘트를 작성합니다. 왜 세 가지 다른 방법으로 동일한 코드를 세 번 구현하고 있습니까? 나는 당신이 안드로이드를 프로그래밍하고 있다고 가정합니다 (당신의 방법 이름에서 loking). Method OnResume은 활동이 시작되거나 다시 시작될 때마다 실행됩니다. 이 주제에 대한 자세한 내용은이 링크 확인, 그런 다음 ... scheduledexecutorservice ?
이제 JMDNS 문제가 발생합니다. JMDNS 라이브러리에는 서비스를 업데이트하는 기능이있는 빌드가 있습니다. 새로운 서비스를 사용할 수있을 때 새로운 서비스를들을 수 있으며 적절한 조치를 취할 수 있습니다. 나는 생각하지 않으며, 서비스의 반복적 인 투표는 올바른 접근 방식이다.
제휴하지 않습니다 StackOverflow