Home

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...

Read more

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...

Read more

Lang 泛型编程

Lang 泛型编程 Generic编程就是不面对特定类型编程, 使得类, 接口, 方法可以处理广泛的类型. 最有代表性的是集合. 那么为什么需要使用泛型呢? 为什么不使用根类型如Java的Object, Kotlin的Any? 本质上JAVA VM类语言就是使用Object来实现泛型, 这个叫类型擦除(syntactic sugar). Java在编译阶段会 检查泛型类型是否匹配, 然后会把泛型类型都替换成Object, 不保留泛型类型信息, 当使用时自动类型转换把Object转换 成泛型类型. 使用泛型比使用Object更安全, 编译阶段会检查所有插入类型是否匹配, 而且不用强制类型转换, 避免出错 使得泛型使得代码更清晰, 代码里清楚的显示了处理类型 因为是类...

Read more

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 系统转换工具

Read more

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中获取。事件...

Read more

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...

Read more

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...

Read more