Android学报第二十五期

1)细说Bitmap

mini note:

内存模型:在Android 2.3.3(API10)之前,Bitmap的像素数据存放在Native内存,而Bitmap对象本身则存放在Dalvik Heap中。Native内存中的像素数据并不会以可预测的方式进行同步回收,有可能会导致内存升高甚至OOM。而在Android3.0之后,Bitmap的像素数据也被放在了Dalvik Heap中。

内存回收:Android3.0之后,并没有强调Bitmap.recycle();而是强调Bitmap的复用。Android3.0(API 11之后)引入了BitmapFactory.Options.inBitmap字段,设置此字段之后解码方法会尝试复用一张存在的Bitmap。这意味着Bitmap的内存被复用,避免了内存的回收及申请过程,显然性能表现更佳。不过,使用这个字段有几点限制:

声明可被复用的Bitmap必须设置inMutable为true;

Android4.4(API 19)之前只有格式为jpg、png,同等宽高(要求苛刻),inSampleSize为1的Bitmap才可以复用;

Android4.4(API 19)之前被复用的Bitmap的inPreferredConfig会覆盖待分配内存的Bitmap设置的inPreferredConfig;

Android4.4(API 19)之后被复用的Bitmap的内存必须大于需要申请内存的Bitmap的内存;

Android4.4(API 19)之前待加载Bitmap的Options.inSampleSize必须明确指定为1。

计算Bmp内存开销:

1.getByteCount() [since api 12]

2.getAllocationByteCount() [since api 19]

2)Android 7.0应用冷启动流程分析

mini note:

Android学报第二十五期_第1张图片

Activity.startActivity => Instrumenttation.execStartActivity => ActivityManagerNative.startActivity => ActivityManagerProxy.startActivity => AMS.startActivity =>


3)Android插件化基本原理系列文章

我是因为前些天听插件技术分享听得不完全明白,所以要加强学习这块的知识。

4)vysor原理以及Android同屏方案

mini note:

1. 新建了一个httpserver,通过screenshot.jpg获取截图,通过socket input接口来发送点击信息,通过h264这个接口来获取实时的屏幕视频流。

2. 反射Surface/SurfaceControl的screenshot方法

5)利用 OkHttp Interceptor 模拟数据

mini note:

Android学报第二十五期_第2张图片

public class FakeApiInterceptor implements Interceptor{


           @Override

           public  Responseintercept(Chain chain)  throws IOException {

                    Response response;

                  if(BuildConfig.DEBUG  &&  chain.request().url().toString().equals(API_URL)) {

                          String json ="{\"code\": 200, \"message\": \"success\"}";

                         response =newResponse.Builder().code(200)

                                          .addHeader("Content-Type","application/json")

                                          .body(ResponseBody.create(MediaType.parse("application/json"), json))

                                          .message(json)

                                          .request(chain.request())

                                          .protocol(Protocol.HTTP_2)

                                         .build();

                  } else {

                        response = chain.proceed(chain.request());

                  }

               return response;

          }

}

你可能感兴趣的:(Android学报第二十五期)