您好,登录后才能下订单哦!
怎么在Android中将异步方法以同步方式实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
public static String getSyncBusiness(final String url){ try { FutureTask<String> task = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { URL u = new URL(url); HttpURLConnection connection = (HttpURLConnection) u.openConnection(); connection.setDoInput(true); connection.setRequestMethod("GET"); connection.connect(); InputStream in = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf8")); final StringBuilder sb = new StringBuilder(); String line = null; while((line = br.readLine())!=null){ sb.append(line); } return sb.toString(); } }); new Thread(task).start(); return task.get(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("网络访问错误"); } }
FutureTask接口是一个泛型接口,可以设置需要返回的类型,并且可以看出该方法为了方便程序员的操作,巧妙的通过抛出一个总Exception来保证方法统一执行统一判断,类似于RxJava的Exception机制。并且通过源码可以看出,该接口实现了RunnableFuture<>接口,而RunnableFuture接口又继承于Runnable这也就解释了为什么可以直接在new Thread中传入Task对象。
可以理解为FuturTask通过实现Runnable对子线程进行驱动,进行异步的网络请求等操作,但是并没有进行异步并发操作,而是同时阻塞了UI线程,直到该子线程执行完毕。
除了以上还可以直接使用Callable接口,需要注意,Callable需要线程池ExecutorService才可以进行驱动。
public static String getSyncBusiness2(final String url){ try { Callable<String> callable = new Callable<String>() { @Override public String call() throws Exception { URL u = new URL(url); HttpURLConnection connection = (HttpURLConnection) u.openConnection(); connection.setDoInput(true); connection.setRequestMethod("GET"); connection.connect(); InputStream in = connection.getInputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(in, "utf8")); final StringBuilder sb = new StringBuilder(); String line = null; while((line = br.readLine())!=null){ sb.append(line); } return sb.toString(); } }; ExecutorService exec = Executors.newFixedThreadPool(1); Future<String> task = exec.submit(callable); return task.get(); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("网络访问错误"); } }
Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。
看完上述内容,你们掌握怎么在Android中将异步方法以同步方式实现的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。