DAYS

只要写下来,人的念想就能超越死亡与时间,永远存在下去。

0%

在 Flutter 中简单实现 LiveData

如果你是一名 Android 开发者,LiveData 一定不陌生 ,它和 ViewModel 组合便可以构成简单的 MVVM 模式,而且是生命周期敏感的,不会造成不必要内存泄漏。

那么在 Flutter 中是否也能使用到 LiveData 呢?很可惜,官方并没有给出相关 API。但是使用现有的官方 API 和第三方 API 还是可以简单实现的。

首先我们总结下 LiveData 和 ViewModel 的几个特点:

  1. LiveData 可自动通知其上的观察者其值的改变。
  2. LiveData 会监听 Activity 或 Fragment 的生命周期,若视图已销毁,则不会通知其上的观察者(observeForeve除外)。
  3. ViewModel 用于业务逻辑和 UI 解耦,可复用。
阅读全文 »

一、前言

从 2015 年接触 Flutter 到现在也有两年多时间,在这期间我并没有正真地去了解这个神奇的框架,只是时不时拉取 master 的最新代码,编一下 flutter_gallery 看看有什么新特性。但随着此次 GDD 的召开,Flutter 被 Google 带到了国内开发者的眼前,相信谷歌是已经准备好让 Flutter 走上移动开发历史的舞台了。

一款好的移动应用该具备什么品质?戳中用户痛点的功能,炫酷的 UI 还是流畅的操作体验?这些都很重要,少了其中任何一点都是得不到用户青睐的。但今天我要说的虽然不是前面这三个中的哪一个,但也是少了它就不行的“应用国际化”。

对于开发者来说,在 Android 和 iOS 开发中使用国际化已经是老掉牙的套路了,那么在 Flutter 中该如何使用国际化呢?是否也想 Android 一样只要多配置一个 xml 就能搞定了呢?

阅读全文 »

Java

说到 Java,大家第一时间想到的类似于下面的程序语句:

1
2
3
4
5
6
7
8
9
10
package com.zqlite.jvm;

public class HelloJVM {

private static final int k = 100;
public static void main(String ...args){
int a = 0,b=3;
System.out.println(a+b+k);
}
}
阅读全文 »

在讲 LZW 在 GIF 中的应用前,有必要先简单的过一下 LZW 算法。

LZW算法又叫“串表压缩算法”就是通过建立一个字符串表,用较短的代码来表示较长的字符串来实现压缩。 LZW压缩算法是Unisys的专利,有效期到2003年,所以对它的使用已经没有限制了

在上面的介绍中,关键在于字符串表这一概念,为了简单理解,我举一个例子(此例子并不是完全使用的 LWZ 算法,但思想是一致的)。

阅读全文 »

最近花了点时间用 C++ 写了一个 GIF 图片的解析程序,在这一过程中我找了许多中文相关的材料,但没有哪一篇是真正能够让读者完全理解 GIF 的文件格式和 LZW 在 GIF 中的应用(解析部分)。在查阅了一些官方文档后我算是顺利的将程序完成了,顺道我就把 GIF 文件的解析在这儿讲讲清除,方便大家学习。

下面这两个网页是我参考的比较权威的资料,大家也可以直接阅读。

http://giflib.sourceforge.net/index.html
https://www.w3.org/Graphics/GIF/spec-gif89a.txt

阅读全文 »

gif

最近花了点时间用 C++ 写了一个 GIF 图片的解析程序,在这一过程中我找了许多中文相关的材料,但没有哪一篇是真正能够让读者完全理解 GIF 的文件格式和 LZW 在 GIF 中的应用(解析部分)。在查阅了一些官方文档后我算是顺利的将程序完成了,顺道我就把 GIF 文件的解析在这儿讲讲清除,方便大家学习。

下面这两个网页是我参考的比较权威的资料,大家也可以直接阅读。

http://giflib.sourceforge.net/index.html
https://www.w3.org/Graphics/GIF/spec-gif89a.txt

阅读全文 »

此指南适用于那些曾经或现在进行Android应用的基础开发,并希望了解和学习编写Android程序的最佳实践和架构。通过学习来构建强大的生产级别的应用。

注意:此指南默认你对Android开发有比较深的理解,熟知Android Framework。如果你还只是个Android开发新手,那么建议先学习下Android的基础知识。

阅读全文 »

持久库Room

Room在SQLite上提供了一个抽象层,以便在利用SQLite的全部功能的同时使流畅的数据库访问。

需要处理一些重要的结构化数据的App通常会从本地的持久数据中受益匪浅。最常见的就是使用本地缓存,这样的话下次如果设备无法联网用户也能浏览本地数据并进行更改。等下次联网后再和服务器进行同步。

Android的Framework为了支持处理原始SQL而提供了SQLite这一强大的API,当时SQLite的API还是相对比较低级,在使用的时候需要花费大量的经历:

  • 没有对原始SQL语句的编译时验证,随着数据库表格的更改,你需要更新相关SQL操作,而这个过程可能耗时且容易出错。
  • 你需要使用大量的样板代码在SQL查询和Java数据对象之间进行转换。

Room在为SQL提供抽象层的同时也会考虑到上述的问题。

阅读全文 »