240 发简信
IP属地:北京
  • Android 系统会根据图片格式和APP 指定的编码综合判断, 得出最终使用的编码. 可以参考源代码 (Android 8): SkAndroidCodec::computeOutputColorType(SkColorType requestedColorType):
    {
    124 switch (requestedColorType) {
    125 case kARGB_4444_SkColorType:
    126 return kN32_SkColorType;
    127 case kN32_SkColorType:
    128 // F16 is the Android default for high precision images.
    129 return highPrecision ? kRGBA_F16_SkColorType : kN32_SkColorType;
    130 case kIndex_8_SkColorType:
    131 if (kIndex_8_SkColorType == suggestedColorType) {
    132 return kIndex_8_SkColorType;
    133 }
    134 break;
    135 case kAlpha_8_SkColorType:
    136 // Fall through to kGray_8. Before kGray_8_SkColorType existed,
    137 // we allowed clients to request kAlpha_8 when they wanted a
    138 // grayscale decode.
    144 case kRGB_565_SkColorType:
    145 if (kOpaque_SkAlphaType == this->getInfo().alphaType()) {
    146 return kRGB_565_SkColorType;
    147 }
    148 break;
    153 }
    161 // |suggestedColorType| may be kN32_SkColorType or kIndex_8_SkColorType.
    162 return highPrecision ? kRGBA_F16_SkColorType : suggestedColorType;
    }
    可以看出, 4444被直接转为8888(API 官方文档里有描述). 如果图片中没有透明度信息, 565才不会被转为8888

    Android bitmap config你理解对了吗?

    在写本文之前,我还以为自己对android的bitmap很熟悉,直到自己亲手写代码实践,才发现自己错了很多年。真是汗颜啊! Bitmap Config 首先,根据Androi...

  • 如果消息延时时间比较长, 可能会引起问题. 如果消息没有延时, 应该不会引起什么问题.

    【面试题】Handler/Runnable造成的内存泄漏

    1 内存泄漏根本原因 内存泄漏的根本原因是:长生命周期的对象持有短生命周期的对象,短生命周期的对象就无法及时释放。 2 Handler错误用法 Handler允许我们发送延时...

  • 这种不算真正的泄露, 只是 Runnable 对象暂时放在 MessageQueue 里无法 GC, 一旦 Runnable 消息被执行完, Runnable 和被 Runnable 引用的对象就可以被 GC 了

    【面试题】Handler/Runnable造成的内存泄漏

    1 内存泄漏根本原因 内存泄漏的根本原因是:长生命周期的对象持有短生命周期的对象,短生命周期的对象就无法及时释放。 2 Handler错误用法 Handler允许我们发送延时...

  • 120
    Android Bitmap变迁与原理解析(4.x-8.x-++)

    App开发不可避免的要和图片打交道,由于其占用内存非常大,管理不当很容易导致内存不足,最后OOM,图片的背后其实是Bitmap,它是Android中最能吃内存的对象之一,也是...

  • java和android子线程中抛出异常的研究

    Java语言 java语言里, 子线程中抛出的RuntimeException, 只会使得子线程结束运行, 不会影响主线程的执行, 进程不会因此crash. 主线程无法ca...