首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android那些高逼格的写法

最近在看一些代码的时候,发现许多android的开发者其实对java了解的并不是很多,也许你看过很多android相关的书籍,但是书中只会告诉你android相关的接口怎么用,但是不会给你讲java的语法,虽然功能都能实现,但是有些语法让你用起来,更显逼格。

所以我开了这样一个专题【Android那些高逼格的写法】

ps:关于WiFi的专题还没写完,又在给自己挖坑了。

言归正传,开始了。

Callable和Future

Callable接口类似于Runnable,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到。

先说一个场景,比如,我需要两个字符串,这两个字符串都需要通过请求获取。我们一般的操作是,起一个异步线程,在异步线程中做两次请求,获取两个字符串,并进行处理。假设一次请求的时间是1s,那么处理两个字符串的时间就是2s。那如果我需要多次请求的结果呢,比如100次,那么就需要100s,这显然不太合理。

这时候就可以使用Callable与FutureTask进行配合,启动100个线程(当然启动100个线程也不合理,这里只是假设,正常情况交给设定线程数的线程池处理)。你可能会说,这样线程就不同步了,你怎么知道,第一个线程结束后,第二个线程肯定结束了,可能出了意外,没有返回呢,没关系,这就是Callable+Future的用处。

好了下面说一下用法:

Callable + Future

首先我会写模拟两个网络请求(真实网络不可控,就写个方法假设进行了网络请求吧):

为了方便对比,我就不设置100次了,就按照十次算就好了:

我做了个计时操作,看一下耗时。

Callable + FutureTask

FutureTask的用法与Future类似,这里也上一个例子:

结果对比

为了做出对比,我再写一个如果按顺序进行网络请求的例子。

好的,我们运行一下看看结果:

结果已经很明显了,顺序执行的当然要慢于并发执行。同时使用Callable还解决了并发执行时间不好控制的问题。

这是为什么呢?

为什么每次调用future.get()正好网络请求会完成呢,如果没完成怎么办。

答,会等待,当我们利用future获取callable的返回结果时,如果get不到,还没有完成,会处于等待的状态,等拿到结果再调用下一个future的get,如果耗时差不多,一般也都完了,没完的就会再等。由于是并发执行,所以最终耗时与线程耗时最长的一样。

掌握这种方法对于多线程处理,又想进行一定的控制,有很好的疗效。

不知道你在你的代码中用过没有?

热门推荐各类仿客户端源码大云集1G+ Android学习视频大放送6000套android源码直接放送

• end •

By mymdeep

DeepAndroid

一起分享技术的点滴

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180403G1XMSW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券