chendongMarch / SocialSdkLibrary

提供微博、微信、QQ、Tim、QQ 轻聊版、钉钉的登陆分享功能支持;
http://zfyx.coding.me/article/3067853428/
Apache License 2.0
424 stars 72 forks source link

很厉害!不知道是否可以更好。 #3

Closed kaleai closed 6 years ago

kaleai commented 6 years ago

希望采用如下方案:

https://juejin.im/post/5b0bad475188251545422199

https://juejin.im/post/5ad05330518825557b4d2851

chendongMarch commented 6 years ago

感谢建议!

  1. 关于图片压缩的方案,后续我会仔细研究博客介绍的方案并做测试,争取找到更优的方案。
  2. 关于使用 Fragment hook Activity 生命周期的方案,因为微信分享、钉钉分享等需要强绑定指定包名的 Activity,并且我关注的生命周期节点并不仅仅是 onActivityResult() 还包括 onNewIntent() 等,所以这种方式可能并不适用。

再次感谢,如果有问题还请及时反馈。

kaleai commented 6 years ago

已经没有什么可以反馈的了,希望及时更新。onNewIntent()其实也可以通过简单oncreate来判断,或者用apt来hook。千万不要用透明的activity做处理

kaleai commented 6 years ago

这个项目用了无用的activity来做,就很糟糕。https://github.com/tianzhijiexian/ShareLoginLib

chendongMarch commented 6 years ago

我试了一下你的图片压缩方案,找了一张图片发现可能有有问题,代码和日志:

public byte[] compressImage(Bitmap bitmap) {
    if (bitmap == null) {
        return null;
    }
    final long size = 32768;
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(bitmap.getWidth() * bitmap.getHeight());
    int options = 100;
    bitmap.compress(Bitmap.CompressFormat.JPEG, options, outputStream);
    while (outputStream.size() > size && options > 6) {
        outputStream.reset();
        options -= 6;
        bitmap.compress(Bitmap.CompressFormat.JPEG, options, outputStream);
        LogUtils.e("chendong", "compress once length = " + outputStream.size() + "  options = " + options);
    }
    bitmap.recycle();
    return outputStream.toByteArray();
}

输出的 byte[] 大于了 32kb

compress once length = 694821  options = 94
compress once length = 566652  options = 88
compress once length = 493247  options = 82
compress once length = 443981  options = 76
compress once length = 388312  options = 70
compress once length = 333168  options = 64
compress once length = 297854  options = 58
compress once length = 262844  options = 52
compress once length = 239007  options = 46
compress once length = 215220  options = 40
compress once length = 194246  options = 34
compress once length = 168912  options = 28
compress once length = 138816  options = 22
compress once length = 107564  options = 16
compress once length = 74472  options = 10
compress once length = 35293  options = 4
finally length = 35293

感觉单纯减小 qulity 的方法并不可行

chendongMarch commented 6 years ago

另外透明 Activity 的问题, 微信那边是要必须使用 Activity 的,可能有更好的方案我还不知道,不过我觉得就实现成本和效果而言,还是可以接受的,我不知道你说的糟糕是指的什么,是存在什么问题吗?

kaleai commented 6 years ago

图片方面因为这里的质量为6,所以无法继续压缩了,才会出现上述问题。你可以先进行图片的大小压缩,然后再如此处理即可。

        if (src.getWidth() > 250 || src.getHeight() > 250) {
            bitmap = ThumbnailUtils.extractThumbnail(src, 250, 250);
        } else {
            bitmap = src;
        }
kaleai commented 6 years ago

close的意思是可以解决还是????

chendongMarch commented 6 years ago

是觉得整体方案差不多,原来采用的也是差不多的方案,我整理了一下,微信32k解决方案,是先进行 sampleSize 采样,后循环压缩逼近 32k。