Android Tv
Android TV
source: _posts/android/2020-03-21-android-tv.md/#excerpt
准备工作
适配Android 4.0 系统电视
Android TV 最低支持5.0 系统,但是5.0系统不能覆盖所有设备, 需要支持到4.0系统。
app/build.gradle
把minSdkVersion 改成16
AndroidManifest.xml 设置覆盖库的配置, 解决库的最低版本支持
<uses-sdk tools:overrideLibrary="androidx.tvprovider,androidx.leanback,androidx.leanback.preference"/>
MainAc...
Flutter async
Flutter async
Future
Future有三种关闭, uncompleted, completed with data, completed with error.
Future简化了Event Loop, 使得代码不用涉及到事件循环. Event Loop会自动解析Future, 然后分为多个事件加入队列.
只用负责得到一个Future并且设置将来Future成功后或者失败后处理的代码.
Future() - 接收一个函数, 该函数异步执行, 返回一个与函数返回类型一样的Future
Future.value() - 已经有正确结果了
Future.error() - 已经有错误结果了
Future.delayed() - 运行函数前, 需要等待一定时间
Fut...
Lang 泛型编程
Lang 泛型编程
Generic编程就是不面对特定类型编程, 使得类, 接口, 方法可以处理广泛的类型. 最有代表性的是集合.
那么为什么需要使用泛型呢? 为什么不使用根类型如Java的Object, Kotlin的Any?
本质上JAVA VM类语言就是使用Object来实现泛型, 这个叫类型擦除(syntactic sugar). Java在编译阶段会
检查泛型类型是否匹配, 然后会把泛型类型都替换成Object, 不保留泛型类型信息, 当使用时自动类型转换把Object转换
成泛型类型.
使用泛型比使用Object更安全, 编译阶段会检查所有插入类型是否匹配, 而且不用强制类型转换, 避免出错
使得泛型使得代码更清晰, 代码里清楚的显示了处理类型
因为是类...
Flutter security
Flutter security
Flutter 签名
SHA-1
SHA-224
SHA-256
SHA-384
SHA-512
MD5
HMAC (i.e. HMAC-MD5, HMAC-SHA1, HMAC-SHA256)
MD5:
var digest = md5.convert(List<int>);
var str = hex.encode(digest.bytes);
Reference
crypto 签名
convert 转换工具
dart:convert 系统转换工具
Flutter Dart 原理
Flutter Dart 原理
Dart 原理
source: _posts/flutter/2020-03-16-flutter-principle.md/#excerpt
Dart 介绍
Dart是单线程模式,所以当前任务需要快速执行,不然会使后面的任务阻塞。虽然是单线程模式,但是Dart还是支持Futures、Streams、
Background Work等等异步方法。
一般其他的语言是使用多线程模式,可以很方便的共享内存、充分利用系统资源、使用高效的调度算法等等。但是这样会导致程序逻辑复杂,
容易出错,并且因为共享内存,一个线程出错是致命的,会导致程序结果错误或者进程崩溃。
Dart是单线程模式,事件从microtask queue和event queue中获取。事件...
Flutter Log
Flutter Log
Flutter异常分为VM异常和Dart异常:
Dart异常: 出错不会导致崩溃, 一般会导致代码不继承执行(没有任何反应),如果是界面错误会导致跳转ErrorWidget
VM异常:会导致程序崩溃,跳出
Dart异常分为同步异常和异步异常:
同步异常:可以使用try-catch捕获
异步异常:使用try-catch捕获不到
Flutter日志输出,看print函数会发现,如果设置了Zone会调用printToZone, 如果没有会调用printToConsole().
Flutter中Zone, 是一个封闭区域,为了让异步
调用之间保持稳定,代码总在当前区域的上下文中执行。主要用来处理print, timers, micr...
Flutter IO编程
Flutter IO编程
Flutter File编程
使用path_previder库操作本地文件及目录
文件操作类有File、Directory、Link, 都继承至FileSystemEntity 每种操作函数都有两个版本
同步和异步(如, rename()和renameSync())
使用File.open(FileMode) 得到IOSink或者RandomAccessFile来对文件进行读写,读写对象需要close()
Flutter Socket编程
Tcp使用Socket、ServerSocket 及 RawSocket、RawServerSocket
ServerSocket.bind('127.0.0.1', 4041)
.then((serv...
453 post articles, 57 pages.