Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/188.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 自动刷新活动中的JmDNS服务_Android_Listactivity_Android Activity_Zeroconf_Jmdns - Fatal编程技术网

Android 自动刷新活动中的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

我正在尝试在后台自动刷新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刷新服务(){
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();
}