_yifan

Coder


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Mac一键解密xlog文件

发表于 2022-05-07 分类于 Mac , python , xlog

python2.7

macOS Monterey已经移除python2.7,即便是操作系统通过升级到最新版本的macOS Monterey以后,也会移除了随系统发行的 Python 2.7,所以如果找不到python2.7,需要重新安装一次。

下载安装python2.7

https://www.python.org/ftp/python/2.7.18/python-2.7.18-macosx10.9.pkg 一路一直点下一步安装即可

阅读全文 »

MacOS环境下连接ESP32C3烧录固件

发表于 2022-03-23 Bearbeitet am 2022-05-07 分类于 ESP32C3 , Mac

准备

环境

  • 系统
    • MacOS Big Sur 11.6 (M1)
  • python
    • Python 3.8.9 (系统自带)
  • pip
    • pip 22.0.4 from /Users/wuyifan/Library/Python/3.8/lib/python/site-packages/pip (python 3.8)
阅读全文 »

StatefulWidget与StatelessWidget

发表于 2022-03-10 Bearbeitet am 2022-05-07 分类于 Flutter , Dart

一、StatelessWidget 和 StatefulWidget

StatelessWidget 和 StatefulWidget 都是直接继承自 Widget 类,是大部分widget的父类

  • StatelessWidget即无状态组件,可以理解为将外部传入的数据转化为界面展示的内容,只会渲染一次。例如Text
  • StatefulWidget是有状态组件,是定义交互逻辑和业务数据,可以理解为具有动态可交互的内容界面,会根据数据的变化进行多次渲染。

二、生命周期

阅读全文 »

Dart的单线程模型与异步操作

发表于 2022-03-10 分类于 Flutter , Dart

一、Dart单线程模型

71646925800_.pic_副本.png

Dart 是单线程模型,有类似与线程的isolate,它是有自己的内存和单线程控制的运行实体,一个Fluuer程序由一个或多个isolate组成,代码默认都在main isolate中执行,而在main isolate中是以Looper消息循环机制来实现dart的事件机制,looper其中包含两个任务队列,一个是“微任务队列” microtask queue,另一个叫做“事件队列” event queue,且微任务的优先级高于事件。基于dart的单线程,代码是按顺序执行,其中的优先级分为:

  • 在 Main 中写代码将最先执行,执行完 Main 中的代码后,Looper就启动并开始循环;
  • 先检查并执行 Microtask Queue 中的任务, 通常使用 scheduleMicrotask 将事件添加到 MicroTask Queue 中;
  • 最后执行 EventQueue 队列中的代码,通常使用 Future 向 EventQueue加入时间,也可以使用 async 和 await 向 EventQueue 加入事件。

入口函数 main() 执行完后,消息循环机制便启动了。首先会按照先进先出的顺序逐个执行微任务队列中的任务,当所有微任务队列执行完后便开始执行事件队列中的任务,事件任务执行完毕后再去执行微任务,一直循环。
所有的外部事件任务都在事件队列中,如IO、计时器、点击、以及绘制事件等;
而微任务通常来源于Dart内部,并且微任务非常少。这是因为如果微任务非常多,就会造成事件队列排不上队,会阻塞任务队列的执行(比如用户点击没有反应的情况);

二、异步

Dart 是单线程实体的语言,一般的异步操作实际上还是通过单线程通过调度任务优先级来实现的,方式大概有以下几种:

1、Future

相对于 async + await,最主要的功能就是提供了链式调用,默认在事件队列中执行,也可以通过Future.microtask来使用微任务执行,提高优先级。

创建一个Future过程:

  • 创建一个Future(可能是我们创建的,也可能是调用内部API或者第三方API获取到的一个Future,总之你需要获取到一个Future实例,Future通常会对一些异步的操作进行封装);
  • 通过.then(成功回调函数)的方式来监听Future内部执行完成时获取到的结果;
  • 通过.catchError(失败或异常回调函数)的方式来监听Future内部执行失败或者出现异常时的错误信息;

Future中通常有两个函数执行体:

  • Future构造函数传入的函数体
  • then的函数体(catchError等同看待)

Future构造函数传入的函数体放在事件队列中,then的函数体要分成三种情况:

  • Future没有执行完成(有任务需要执行),那么then会直接被添加到Future的函数执行体后;
  • 如果Future执行完后就then,该then的函数体被放到如微任务队列,当前Future执行完后执行微任务队列;
  • 如果Future世链式调用,意味着then未执行完,下一个then不会执行;

2、async + await组合

使用async + await关键字修饰函数,即可向事件队列中插入事件来实现异步操作,用同步的代码格式,去实现异步的调用过程,但其实也是用了Future;

3、Stream

相对于Future,stream可以接受多个异步结果,但是要注意的是,普通的 Stream 只可以有一个订阅者,如果想要多订阅的话,要使用 asBroadcastStream()来转换;

Mac数据库一键解密

发表于 2022-02-06 Bearbeitet am 2022-02-21 分类于 Mac , Android , SQLite解密 , 自动化

环境

安装brew

1
2
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
source .zprofile

安装SQLCipher

1
brew install sqlcipher

获取SQLCipher全路径

1
2
$ which sqlcipher
/opt/homebrew/bin/sqlcipher

创建自动化项目

阅读全文 »

Android Flutter混合开发实现

发表于 2020-07-31 Bearbeitet am 2020-09-03 分类于 Android , Flutter

混合开发

目前来说作为纯Flutter开发的app较少,基本都是将flutter作为共用的组件来开发、在Android\iOS原生项目中引入进行使用,而且个人感觉Android Studio对Native引用Flutter项目的支持比较好(AS 3.6)

Android Native中引入Flutter

创建项目

  • 按照一般流程创建即可,此处用的是androidx项目
    阅读全文 »

Gitlab 配置邮件服务

发表于 2020-07-16 分类于 Gitlab

配置

修改配置文件(建议先备份!!!)

  • 打开文件
    1
    vim /etc/gitlab/gitlab.rb
阅读全文 »

Git操作备忘

发表于 2020-07-16 Bearbeitet am 2020-09-03 分类于 Git

初始化

Git 全局设置

1
2
git config –global user.name “吴一帆”
git config –global user.email “kelvinsail@163.com“
阅读全文 »

CentOS+Jenkins+Gradle 配置Android自动打包

发表于 2020-06-18 Bearbeitet am 2020-07-16 分类于 Android , Gradle , Jenkins , CentOS

检查JDK

如果jdk是通过yum安装的OpenJDK,则需要卸载之后重新安装,否则编译时会报错

1
2
3
4
5
6
7
8
9
10
11
12
13

* What went wrong:
Execution failed for task ':base:compileDebugJavaWithJavac'.
> Could not find tools.jar. Please check that /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre contains a valid JDK installation.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

Deprecated Gradle features were used in this build, making it incompatible with Gradle 6.0.
Use '--warning-mode all' to show the individual deprecation warnings.
See https://docs.gradle.org/5.6.4/userguide/command_line_interface.html#sec:command_line_warnings

阅读全文 »

ClashX 配置

发表于 2020-06-16 Bearbeitet am 2020-06-19 分类于 ClashX

代理白名单

ClashX(Mac)Git地址

  • 编辑~/.config/clash/proxyIgnoreList.plist(如果没有该文件,则新建)
  • 参考Demo文件加入自定义的白名单域名

    阅读全文 »
12…7
博主

博主

61 日志
52 分类
69 标签
粤ICP备18121454号 © 2022 power by yifan