首页 > 其他 > 详细

【笔记记录】2020-06-12

时间:2020-06-12 14:30:47      阅读:47      评论:0      收藏:0      [点我收藏+]

【安卓】

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  

【笔记记录】2020-06-12

原文:https://www.cnblogs.com/nicojerry/p/13048829.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!