怎么在Android中将异步方法以同步方式实现

  介绍

怎么在Android中将异步方法以同步方式实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

public  static  String  getSyncBusiness (final  String  url) {      ,,,try  {   ,,,,,FutureTask, task =, new  FutureTask (new  Callable< String> (), {      ,,,,,,@Override   ,,,,,,,public  String 叫(),throws  Exception  {   ,,,,,,,,,URL  u =, new  URL(网址);   ,,,,,,,,,HttpURLConnection  connection =, (HttpURLConnection), u.openConnection ();   ,,,,,,,,,connection.setDoInput(真正的);   ,,,,,,,,,connection.setRequestMethod (“GET");   ,,,,,,,,,connection.connect ();   ,,,,,,,,,InputStream 拷贝=,connection.getInputStream ();   ,,,,,,,,,BufferedReader  br =, new  BufferedReader (new  InputStreamReader (,,“utf8"));   ,,,,,,,,,final  StringBuilder  sb =, new  StringBuilder ();   ,,,,,,,,,String  line =,空;   ,,,,,,,,,,((=line  br.readLine ()) !=null) {   ,,,,,,,,,,,sb.append(线);   ,,,,,,,,,}   ,,,,,,,,,return  sb.toString ();   ,,,,,,,}   ,,,,,});      ,,,,,new 线程(任务).start ();      ,,,,,return  task.get ();   ,,,},catch  (Exception  e), {   ,,,,,e.printStackTrace ();   ,,,,,throw  new  RuntimeException(“网络访问错误“);   ,,,}      }

FutureTask接口是一个泛型接口,可以设置需要返回的类型,并且可以看出该方法为了方便程序员的操作,巧妙的通过抛出一个总异常来保证方法统一执行统一判断,类似于RxJava的异常机制,并且通过源码可以看的出,该接口实现了<强> RunnableFuture<在接口,而<强> RunnableFuture 接口又继承于<强> Runnable 这也就解释了为什么可以直接在新线程中传入任务对象。

可以理解为FuturTask通过实现可运行对子线程进行驱动,进行异步的网络请求等操作,<强>但是并没有进行异步并发操作,而是同时阻塞了UI线程,直到该子线程执行完毕。

除了以上还可以直接使用<强>调用接口,需要注意,可调用的需要线程池<强> ExecutorService 强才可以进行驱动。

public  static  String  getSyncBusiness2 (final  String  url) {      ,,,try  {   ,,,,,Callable, callable =, new  Callable (), {   ,,,,,,@Override   ,,,,,,,public  String 叫(),throws  Exception  {   ,,,,,,,,,URL  u =, new  URL(网址);   ,,,,,,,,,HttpURLConnection  connection =, (HttpURLConnection), u.openConnection ();   ,,,,,,,,,connection.setDoInput(真正的);   ,,,,,,,,,connection.setRequestMethod (“GET");   ,,,,,,,,,connection.connect ();   ,,,,,,,,,InputStream 拷贝=,connection.getInputStream ();   ,,,,,,,,,BufferedReader  br =, new  BufferedReader (new  InputStreamReader (,,“utf8"));   ,,,,,,,,,final  StringBuilder  sb =, new  StringBuilder ();   ,,,,,,,,,String  line =,空;   ,,,,,,,,,,((=line  br.readLine ()) !=null) {   ,,,,,,,,,,,sb.append(线);   ,,,,,,,,,}   ,,,,,,,,,return  sb.toString ();   ,,,,,,,}   ,,,,,};   ,,,,,ExecutorService  exec =, Executors.newFixedThreadPool (1);   null   null   null   null   null   null   null

怎么在Android中将异步方法以同步方式实现