Android异步获取图片,变成同步线程。---由微信分享小程序说起

Android开发都知道在做微信分享的时候,都需要判断将要展示的图片是否是URL还是Base64的图片资源,前者需要自己去下载一个图片,在转成字节数组的形式;后者可以直接转成字节数组传给微信的参数。

情况一:很多时候我们需要从网上异步下载图片到本地,例如:

之后再转化成字节数组传递给微信的WXMediaMessage。

情况二:如果还有些错误的图片不需要异步线程处理,很快就能有返回。

如果这两种情况,在一起处理,势必就会产生不能准确拿到结果的情况发生,例如:

这样的话,由于异步的网络返回,从网络获取的图片肯定会比从本地获取图片资源要慢,而方法返回肯定会直接去获取bitmap[0]的值,此时如果是第一次点击分享按钮,拿到的值一定是空的。第二次点击就能获取到图片了,但是这不是我们想要的结果,而且也会算作一个bug。so so so 我们需要回调来处理这个问题。

那你会想是不是如下使用回调呢?错误案例如下:

其实这样返回,和之前的返回方法,没有区别。还是没解决,等到网络图片返回之后再返回方法值。

正确的做法,如下:

在使用回调的时候应该这么使用:

其实就是先让方法去做,做完后返回值给我,然后我再在返回的方法中做后面的事情。如果注释了后续代码的那个方块的代码不在这个返回方法中做,还是会发生第一次不能分享出图片,第二次才能使用上一次缓存图片的情况发生。

综上:使用回调的方法可以解决异步返回的问题。

Java中也有一些方法来解决异步转同步的方法,如下的链接,大家可以看下。这些方法在安卓中使用的话会造成UI线程阻塞,所以不适合在Android中使用。

Java 回调机制解析(同步回调/异步回调)https://blog.csdn.net/o15277012330o/article/details/79271385

java多线程Future、FutureTask使用示例,返回异步的结果https://blog.csdn.net/javaloveiphone/article/details/54909540

Java并发编程:CountDownLatch、CyclicBarrier和Semaphore https://www.cnblogs.com/dolphin0520/p/3920397.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值