【安卓】
1. [Java] ThreadLocal
【方法】 public T get() { } public void set(T value) { } public void remove() { } protected T initialValue() { } 【笔记】 1. 实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals属性中的(Thread.threadLocals); 2. 为何threadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个ThreadLocal变量; 【相关】 1. ThreadLocalMap
2.setupCamera2():负责权限检测、摄像头检查、预览大小匹配、TextureView配置、`CameraId`获取、`CameraDevice`获取等等前期工作。
private void setupCamera2(Context context, int width, int height) { // 权限检测 if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { return; } //-------------------------------------------------------------------------------------------------- // 获取摄像头的管理者CameraManager CameraManager manager = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE); try { // 遍历所有摄像头 for (String cameraId : manager.getCameraIdList()) { CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); // 默认打开后置摄像头 - 忽略前置摄像头 if (characteristics.get(CameraCharacteristics.LENS_FACING) == CameraCharacteristics.LENS_FACING_FRONT) continue; // 获取StreamConfigurationMap,它是管理摄像头支持的所有输出格式和尺寸 StreamConfigurationMap map = characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); // 获取所有支持的预览尺寸 previewSizes = map.getOutputSizes(SurfaceTexture.class); // 获取所有支持的拍照尺寸 captureSizes = map.getOutputSizes(ImageFormat.JPEG); mPreviewSize = getOptimalSize(previewSizes, width, height); // 设置 Texture 显示比率 int orientation = context.getResources().getConfiguration().orientation; if (orientation == Configuration.ORIENTATION_LANDSCAPE) { textureView.setAspectRatio(mPreviewSize.getWidth(), mPreviewSize.getHeight()); } else { textureView.setAspectRatio(mPreviewSize.getHeight(), mPreviewSize.getWidth()); } // 设置 Texture 显示缓冲区大小 SurfaceTexture mSurfaceTexture = textureView.getSurfaceTexture(); mSurfaceTexture.setDefaultBufferSize(mPreviewSize.getWidth(), mPreviewSize.getHeight()); // 创建 Surface 用于显示预览数据 mPreviewSurface = new Surface(mSurfaceTexture); // private String mCameraId; mCameraId = cameraId; break; } } catch (CameraAccessException e) { e.printStackTrace(); } //-------------------------------------------------------------------------------------------------- try { // 打开相机: // 第一个参数指示打开哪个摄像头, // 第二个参数stateCallback为相机的状态回调接口 // 第三个参数用来确定Callback在哪个线程执行,为null的话就在当前线程执行 manager.openCamera(mCameraId, new CameraDevice.StateCallback() { @Override public void onOpened(CameraDevice camera) { // private CameraDevice mCameraDevice; mCameraDevice = camera; // 一般可以调用开启预览 // startPreview2(); } @Override public void onDisconnected(@NonNull CameraDevice camera) { Log.i(TAG, "CameraDevice Disconnected"); } @Override public void onError(@NonNull CameraDevice camera, int error) { Log.e(TAG, "CameraDevice Error"); } }, null); } catch (CameraAccessException e) { e.printStackTrace(); } }
3.PathMeasure:主要是用来操作Path的,可以获取路径的长度,路径上某个点的坐标,还可以获取部分路径。
4.Handler机制原理
【简介】 使用Handler在线程中执行任务的过程,是一个经典的生产者消费者模型。 【模型】 生产者(程序) -> 生产数据(Message)-> 发送数据(Handler) -> 存入缓冲区(MessageQueue) >> 取出数据(Looper) -> 得到数据(Message) -> 消费者(Handler) [场景] 1.子线程更新UI 2.定时任务 3.单向通信 4.异步操作 【相关】 1.Handler 2.Message 3.MessageQueue 4.Looper
5.@JavascriptInterface:WebView中提供给JS调用的Java对象,其方法需要使用@JavascriptInterface注解,否则JS调用会报错。
6.ThreadLocal:
【原型】 public class ThreadLocal<T> 【方法】 public T get() { } public void set(T value) { } public void remove() { } protected T initialValue() { } 【笔记】 1. 实际的通过ThreadLocal创建的副本是存储在每个线程自己的threadLocals属性中的(Thread.threadLocals); 2. 为何threadLocals的类型ThreadLocalMap的键值为ThreadLocal对象,因为每个线程中可有多个ThreadLocal变量;
7.[Java] InputStream
方法: 1. mark(int readlimit) readlimit:参数规定在标记位置失效前可以读取字节的最大限制。 2. reset() 3. markSupport()
8.Android SDK Search:Chrome插件,浏览器输入ad + tab会切换搜索Android SDK文档。
9.ViewAnimationUtils:创建披露动画
#### 静态方法 ``` Animator createCircularReveal ( View view, int centerX, int centerY, float startRadius, float endRadius ) ``` #### 代码 ``` val mCircularReveal: Animator = ViewAnimationUtils.createCircularReveal( ucRoot, centerX, centerY, 0f, ucRoot.measuredHeight.toFloat() ) mCircularReveal.setDuration(1500).start() ```
10.Kotlin Map
#### 【HashMap】 #### 【LinkedHashMap】 #### 【TreeMap】 ``` var map = TreeMap<键类型,值类型>() map[key] = value var map = TreeMap<String,String>() map["好"] = good map["学习"] = study println(map["好"]) ```
11.[SQLite] PRAGMA user_version:查询数据库版本号,和SQLiteOpenHeler的版本号参数是一样的。
12.[Frame] Android-ConvenientBanner:通用的广告栏控件,让你轻松实现广告头效果。
13.ShapeDrawable:
【简介】 ShapeDrawable的XML的根元素是shape。 【构造】 1. ShapeDrawable(); 2. ShapeDrawable(Shape s);
14.[Android] SQLiteDatabase:表示一个数据库对象,提供了可以执行SQL语句的方法。
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase("/data/data/com.lingdududu.db/databases/stu.db", null);
15.CMake编译生成so库
#### 第一步 > 设置CMakeLists.txt位置 ``` // android {} 里增加 externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } } ``` #### 第一步 > 设置CMakeLists.txt配置 ``` cmake_minimum_required(VERSION 3.4.1) add_library(MyLib SHARED a.cpp b.cpp) # (可选)如果有需要则添加额外链接的目标文件 # 例如 a.cpp 引入 include "android/log.h" # android、log 两个库是由安卓NDK提供的 target_link_libraries(MyLib android log) ``` #### 点击 make project 按钮,进行工程 mak 在app\build\intermediates\cmake\debug\obj生成对应平台的so库
【后端】
1.PHP标量模式:严格模式和强制模式
2.[PHP] Password Hashing API,一组密码哈希和验证API。
3.[PHP] array_key_exists(key, array)
4.[JSP] 服务器端跳转
1. 使用forward动作标签 `<jsp:forward page="page2.jsp" />` 2. 使用RequestDispatcher类 `<% request.getRequestDispatcher("page2.jsp").forward(request, response);%>`
5.[JSP] JVM优化:启动命令行中的参数优化。
【前端】
1.[IOS] drawRect:使用UIKit或CoreGraphics进行绘图
2.[HTML] Referer:超链接的请求会带上这个头信息,表示来源。
3.[HTML] omi:类似于React的一个前端框架。
4.[Flutter] InheritedWidget:用来做轻量级状态管理的widget
原文:https://www.cnblogs.com/nicojerry/p/13048829.html