0%

最初的MVC框架

大多数页面的场景都是从服务器获取数据,然后展示。

MVC框架中的Model是retrofit+okhttp,View+Control都是在Activity/Fragment中,看下代码示例

阅读全文 »

ViewModel实现

1
2
3
4
5
6
7
8
9
10
11
class TestViewModel : ViewModel() {
private val testRepo = TestRepo(viewModelScope.coroutineContext)
private val _uidData = MutableLiveData<String>()
val userInfoData = _uidData.switchMap {
testRepo.getUserInfo(it)
}

fun setUserId(uid: String) {
_uidData.value = uid
}
}

代码量很少,涉及到哪些知识点呢?

阅读全文 »

公钥与私钥的产生

From wiki RSA加密算法

假设Alice想要通过一个不可靠的媒体接收Bob的一条私人消息。她可以用以下的方式来产生一个公钥和一个私钥:

  1. 随意选择两个大的质数 p 和 q, p不等于 q,计算 N=pq。
  2. 根据欧拉函数,求得totient function
  3. 选择一个小于 r 的整数 e,使 e 与 r 互质。并求得 e 关于 r 的模反元素,命名为 d(求 d令 mod )。(模反元素存在,当且仅当 e 与 r 互质)
  4. 将 p 和 q 的记录销毁。

(N,e)是公钥,(N,d)是私钥。Alice将她的公钥 (N,e)传给Bob,而将她的私钥 (N,d)藏起来。

阅读全文 »

对 Okio 源码作分析的文章已有很多,想深刻理解 Okio 还是要自己看一遍源码。
Okio代码不多,整个框架涉及的源文件有几个,可以先阅读它们;

阅读全文 »

Android 帧动画(Frame Animation)的使用十分简单

定义 Animation-List 资源 res/anim/rocket.xml

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

设置到 ImageView

1
2
3
4
5
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
rocketAnimation.start();

但是,当你的帧动画比较长,例如有40张图片,而每张图片又比较大的时候就会很容易出现OOM。
显然 Animation-List 满足不了40张图片这种情况,40张图片就会占用40份内存,非常糟糕的内存占用。

阅读全文 »