怎么在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中将异步方法以同步方式实现的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。