java – ExecutorService似乎在UI上运行线程?
发布时间:2020-12-15 02:09:38 所属栏目:Java 来源:网络整理
导读:Iam尝试使用ExecutorService运行一些代码将我的客户端连接到服务器.显然Iam试图让它在一个单独的线程上运行到UI线程,但是我的UI在代码执行时冻结.这不是我想要的.我以为ExecutorService会在一个单独的线程上运行?下面是我的代码 @Overridepublic void regis
Iam尝试使用ExecutorService运行一些代码将我的客户端连接到服务器.显然Iam试图让它在一个单独的线程上运行到UI线程,但是我的UI在代码执行时冻结.这不是我想要的.我以为ExecutorService会在一个单独的线程上运行?下面是我的代码
@Override public void registerDevice() { ExecutorService exservice = Executors.newFixedThreadPool(10); Future<Boolean> future = exservice.submit(new Callable() { @Override public Boolean call() throws Exception { android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); try { Thread.sleep(20000); } catch (InterruptedException e) { e.printStackTrace(); } reghandler.post(new Runnable() { @Override public void run() { regpresenter.updateUIProgress(); } }); return true; } }); exservice.shutdown(); try { Boolean done = future.get(10,TimeUnit.SECONDS); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } catch (TimeoutException e) { e.printStackTrace(); warningstr = "Server call timed out!"; } exservice.shutDownNow(); } 如果有人能告诉我为什么这不会分开运行到UI线程,我将不胜感激.在阅读有关执行者服务的所有文档后,也许有些东西缺失了.我还有另一个似乎有效的解决方案,但它在另一个线程的run方法中创建了一个带有timertask的循环依赖.如果线程处于活动状态,则timertask会在超时后中断线程.所以我真的不想使用那个解决方案.我也只是测试当前的超时工作.我遗漏了方法中的一些代码,因为它与我的问题不太相关.再次感谢 解决方法
下面的代码表示等待任务结果(最大值为10秒超时)
Boolean done = future.get(10,TimeUnit.SECONDS); 如果您不想等到任务完成,请不要调用get(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |