Flutter入门并开发天气预报APP(1)——Flutter安装
Flutter是什么Flutter是由谷歌推出的一个移动UI框架,可以让开发者快速的在Android和iOS上构建高质量的原生用户界面。
通过它来编写APP的好处在于:
它内置了Android的Material Design风格和iOS的Cupertino风格的UI;
它通过Dart语言编写,只需要编写一份代码就能在Android和iOS设备上得到同样的运行效果;
他有热重载功能,只需要运行APP后,代码更改一点然后点击热重载键就能快速显示出修改后的界面。
使用镜像安装由于一些众所周知的原因,Flutter在国内访问有时候会受到限制,因此Flutter官方为国内开发者搭建了临时镜像,大家可以将下面的环境变量添加到系统中:12export PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn由于我用的是macOS,因此我就只演示macOS的。如果有Linux的用户则和macOS 的安装方式类似,甚至可以说一样;但是对于Windows用 ...
操作系统6--死锁
6.1 死锁的引入在之前我们或多或少都涉及到了死锁,最直接的例子就是哲学家就餐筷子,如果每一个哲学家都拿起了他的右手的筷子,现在都在等左边的筷子。这样一直绕下去,从而产生了死锁。
6.1.1 资源问题在系统中存在着很多不同类型的资源,其中可以引起的死锁的主要是需要采用互斥访问方法的、不可以被抢占的资源、
6.1.1.1 可重用性资源和消耗性资源可重用性资源可重用性资源是一种可供用户重复使用多次的资源,它具有以下性质:
每一个可重用性资源中的单位只能分配给一个进程使用,不允许多个进程共享
进程在使用可重用性资源时,须按照这样的顺序:请求资源 -> 使用资源 -> 释放资源
系统中每一类可重用性资源中的单元数目是相对固定的,进程在运行期间既不能创建也不能删除它
可消耗性资源可消耗性资源又称为临时性资源,它是在进程运行期间,由进程动态的创建和消耗的,它具有以下性质:
每一类可消耗性资源的单元数目在进程运行期间是可以不断变化的,有时它可以有很多,有时可能为0
进程在运行过程中,可以不断地创造可消耗性资源的单元,将它们放入该资源类的缓冲区中,以增加该资源类的单元数目
进程在运 ...
操作系统5--处理机调度
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598
在多道程序中,调度的实质是一种资源分配,处理机调度是对处理机资源进行分配。
5.1 处理机调度的层次和调度算法的目标在多道批处理系统中,一个作业从提交到获得处理机执行,直至作业运行完成,可能需要经历多次处理机调度。
5.1.1 处理机调度的层次
高级调度 高级调度又称为长程调度或作业调度,他的调度对象是作业。主要功能是根据某种算法,决定将外存上处于后备队列中的哪几个作业调入内存、为他们创建进程,分配必要的资源,并将他们放入就绪队列。
低级调度 低级调度又称为短程调度或作业调度,他的调度对象是进程。主要功能是根据某种算法,决定就绪队列中哪个进程应获得处理机,并由分派程序将处理机分配给被选中的进程。
中级调度 中级调度又称为内存调度。主要功能是将那些暂时不能运行的进程,调至外存等待,当他们具备运行条件且内存又稍有空闲时再调入内存。
5.1.2 处理机调度算法的目标5.1.2.1 处理机调度算法的共同目标
资源利用率 ...
Android网络请求1--HttpClient与HttpURLConnection
在早期的时候,Android上还没有像Volley、OkHttp、Retrofit这些优秀的开源库,如果想要使用网络请求的话,就只能自己封装HttpClient和HttpURLConnection。现在我们就来看下Apache的这两个类。
1. HttpClient2.1 导入HttpClient由于从Android 6.0 开始,谷歌就将HttpClient从Android中删除了,所以若现在想使用他,还得导入依赖:在项目的build.gradle的Android代码块下加入依赖,示例:1234android { useLibrary 'org.apache.http.legacy' ...}
2.2 HttpClient的Get首先通过DefaultHttpClient来实例化一个HttpClient,并配置好参数:123456789101112131415 //创建HttpClientprivate HttpClient createHttpClient() { HttpParams mDefaultHttpPa ...
ijkPlayer编译-Android
1. 简介ijkplayer是哔哩哔哩的一个开源视频播放框架,支持Android、iOS。底层是ffplay。
Github地址:bilibili/ijkplayer
2. 编译方法由于通过Gradle编译起来很慢而且一旦失败又得重头来,所以这块就使用AndroidNDK的方式来编译。
2.1 编译之前首先你得配置好等会编译需要的东西。这块我们都会使用Homebrew来安装git和yasm。Homebrew类似于Ubuntu的dpkg、RedHat和centOS的yum,他是macOS上的一个软件包管理器。但是后来出了Linux版。由于ijkplayer官方说用的它,那咱们就用它吧。
Ubuntu1. 先把目前已有的包更新12345678// 从镜像站下载软件列表,并检查有没有需要更新的包sudo apt update// 更新需要更新的包sudo apt upgrade// 自动卸载掉当初为了安装其他软件或其他原因而安装但是目前已经没用的包sudo apt autoremove
2. 安装Homebrew1234567891. 首先确定是否安装ruby apt instal ...
Android网络请求4--解析Retrofit源码
1. Retrofit简介
Retrofit - github
Retrofit - Doc
Retrofit是Square公司的又一力作,针对Android网络请求的框架,遵循Restful设计风格,底层基于OkHttp。
他对比其他框架
性能最好
封装程度高,拓展性差
简介易用,代码简单
解耦彻底
可以非常方便的与RxJava连用
2. Retrofit用法(异步)2.1 添加依赖可以在Retrofit Github库页面里面找到最新版本号,我写这篇博客时最新版导入方式
在你项目的app的build.gradle里面添加implementation 'com.squareup.retrofit2:retrofit:2.6.1'
同时,如果你需要配套的数据转换器还需要导入以下的依赖
Gson: com.squareup.retrofit2:converter-gson
Jackson: com.squareup.retrofit2:converter-jackson
Moshi: com.squareup.retrofit2:converter-moshi
P ...
操作系统4--进程的通信和线程
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598
4.1 进程通信进程通信就是指进程之间的信息交换。
早期的时候,由于技术不发达,以及由于进程的同步和互斥需要在进程间交换一定的数据,所以不少人也将他们称为进程通信,但是实质上他们只能被成为低级的进程通信。以信号量为例,他
效率低 生产者或消费者每次只能向缓冲区投放一个产品或者取出一个产品。
通信对用户不透明
而关于进程间通信所需的数据结构的设置和数据的传送、进程的同步和互斥,都需要程序员去完成,显然是非常不方便的。
所以高级进程通信必须满足如下特点:
使用方便。 OS隐藏了实现进程通信的具体细节,向用户提供了一组用于实现高级通信的命令,用户可以方便地直接利用它实现进程之间的通信。
高效的传送数据。 用户可以直接利用高级通信命令高效的传送大量的数据。
进程通信主要有共享存储器系统、管道通信系统、消息传递系统以及客户机-服务器系统。
4.1.1 共享存储器系统共享存储器系统又分为了两种:
基于共享数据结构的通信方式 ...
uCrop框架用法和源码解析
本人能力不足,在看到源码最后一部分的时候大量抄袭可能是最详细的UCrop源码解析
1. uCrop简介uCrop是目前较火的图片裁剪框架,开发者宣称他会比目前市面上所有的图片裁剪方案都要更流畅。外加他封装程度较高,可自定义,而且颜值很高(似乎这个才是重点),现在越来越多APP选择使用它。github
2. 使用方法得益于uCrop优秀的封装,uCrop的使用方法特简单。
2.1 导入依赖
先在项目的build.gradle中添加
123456allprojects { repositories { jcenter() maven { url "https://jitpack.io" } }}
并在module的build.gradle中添加
implementation 'com.github.yalantis:ucrop:2.2.3' - 轻量级框架
implementation 'com.github.yalantis:ucrop:2.2.3-nati ...
Aria2macOS安装
对不起大家,在我配置好这个软件之后,我兴冲冲的打开了github想下载下ssr4.0forWindows,迫不及待想感受下aria2的快感,结果发现我错了。下载速度就才几十k/s,那一瞬间,我感触很多,我突然想到我昨晚的迅雷下载同样的资源同样的网同样的vpn下大几百k/s 的速度,然后又看到了此时我给予希望的aria,我陷入了沉思,或许这就是人生吧。突然觉得macOS迅雷,也还挺好看的,也挺好用的,完全没有广告,要下载打开,下载完了就退出,唯一问题就是Chrome的迅雷拓展似乎太灵敏了点,我啥都没点就莫名其妙弹出下载页面,除了这个,似乎非常完美。所以,在我配置好aria2并写下这篇博客后的不到1个小时时间,我卸载了aira2,并重新用上了迅雷。所以,我最后只想说一句,财大nb!财大nb!财大nb!对不起,走错片场了,重来,IDM牛逼!IDM牛逼!IDM牛逼!如果哪位牛逼的大哥看到了这篇博客,记得帮我给IDM说声,一个Windows的IDM正版用户急需IDM macOS版!!!
下载Aira2通过github安装
打开github主页 aria2/aria2-Release
找到对 ...
操作系统3--进程的同步
大家可以看下我使用幕布软件画的思维导图,如果大家想使用幕布可以通过我的邀请链接注册,可免费获得一个月高级会员https://mubu.com/inv/477598
3.1 进程同步3.1.1 同步概念3.1.1.1 进程同步的概念进程同步机制的主要任务就是对多个相关进程在执行次序上进行协调,使并发执行的进程之间能按照一定的规则共享系统资源,并能很好的配合工作,从而使程序的执行具有可再现性。
3.1.1.2 制约关系对于处于同一个系统中的多个进程,由于他们共享着系统的资源,或者为了完成同一个任务而相互合作,所以他们之间可能存在下面两种制约关系:
间接相互制约关系 系统中的进程难免会调用像打印机、CPU等这样的临界资源。如果想这些资源正常调用,必须保证多个进程之间互斥地访问这些资源,进而就在这些进程间形成了间接相互制约关系。 为了保证这些进程能有序的进行,对于系统中的这类资源,必须由系统实施统一分配,即用户在使用之前必须先提出申请,绝不允许用户直接使用。
直接相互制约关系 在系统中也会存在一些进程,他们为了完成同一个目标而相互配合合作工作,这种就是直接互相制约关系。 进程间的直接制约 ...