Android 自动刷新活动中的JmDNS服务
我正在尝试在后台自动刷新JmDNS服务。当我尝试时,什么都没有发生:Android 自动刷新活动中的JmDNS服务,android,listactivity,android-activity,zeroconf,jmdns,Android,Listactivity,Android Activity,Zeroconf,Jmdns,我正在尝试在后台自动刷新JmDNS服务。当我尝试时,什么都没有发生: @Override public void onDestroy() { try { hiNeighborService.unregisterListener(this); this.unbindService(this.serviceConnection); } catch (Exception ex) { Log.e(LOG_TAG, "Exception o
@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刷新服务(){
Log.i(Log_标签,“刷新可用邻居…”);
最终列表activeneighborservice=this.hiNeighborService
.getActiveNeights();
Log.d(Log_标记,activeneights.size()+“找到活动邻居!”);
新线程(newrunnable()){
公开募捐{
Log.i(Log_标签,“刷新UI…”);
试一试{
已同步(activeNeighborsViewModel){
activeNeighborsViewModel.clear();
for(邻居:活动邻居){
NeighborViewModel vm=新的NeighborViewModel(
邻居);
vm.setNeighborRunReadCount(ConnectActivity.this
.GetUnderMessageCount(邻居));
if(activeNeighborsViewModel.contains(vm)){
activeNeighborsViewModel.remove(vm);
}
activeNeighborsViewModel.add(vm);
}
}
notifyServiceListChanged();
Log.i(Log_标签,“刷新完成!”);
}捕获(例外情况除外){
例如printStackTrace();
Log.e(Log_标记,例如toString());
}
}
}).start();
}
通常,当一个按钮被点击时,它会被调用,但我希望它是自动的。除非我点击调用resfreshServices()的Resfresh按钮,否则此代码不会执行任何操作。我试图尝试使用线程,但活动关闭,应用程序也关闭。有什么想法吗?首先对您的代码做一点评论。为什么要用三种不同的方法实现相同的代码三次。我假设您正在编程android(查看您的方法名称)。每次启动或恢复活动时,都会执行onresume方法。有关此主题的更多信息,请参阅 好吧,那么。。。您是否已经检查了文档,以了解有关该项目的更多信息 现在来看jmdns问题。jmDns库具有用于更新服务的内置功能。您可以收听新服务,并在新服务可用时采取适当的操作。我不认为对服务进行重复投票是正确的做法 寻找一个关于在android中使用jmdns的小教程
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();
}