复习

singleTask模式,当启动这个实例时,如果栈内存在该实例会令其顶部的所有的实例出栈,并复用该实例。

对称加密,就是加密和解密数据都是使用同一个key,这方面的算法有DES。

非对称加密,加密和解密是使用不同的key。发送数据之前要先和服务端约定生成公钥和私钥,使用公钥加密的数据可以用私钥解密,反之。这方面的算法有RSA。ssh 和 ssl都是典型的非对称加密。

RecyclerView性能优化

1、onBindViewHolder不做逻辑运算等操作

2、DiffUtil的使用

3、减少xml文件inflate时间,利用代码生成view

4、如果item高度是固定的话,可以使用RecyclerView.setHasFixedSize(true);

5、如果子RecyclerView具有相同的adapter,那么可以设置RecyclerView.setRecycledViewPool(pool)来共用一个RecycledViewPool

(如果LayoutManager是LinearLayoutManager或其子类,需要手动开启这个特性:layout.setRecycleChildrenOnDetach(true))

6、用空间换时间,来提高滚动的流畅性。

recyclerView.setItemViewCacheSize(20);

recyclerView.setDrawingCacheEnabled(true);

recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);

7、设置RecyclerView.addOnScrollListener()和onViewRecycled;来在滑动过程中或移除手机屏幕后停止加载的操作。

8、设置adapter.setHasStableIds(true),并重写getItemId()来给每个Item一个唯一的ID,一样的model数据不会重复加载

主线程中的Looper.loop()死循环为什么不会导致ANR?

一个程序的 main 方法执行完成, 便代表着这个程序运行结束, 那么要使 application 一直得到运行,直到用户退出才结束程序, 那么我们势必得让这个线程一直运行下去不能结束, 否则一个APP 刚启动, main 方法结束,直接退出, 那程序也就结束了,那如何让一个线程一直运行呢?这里就用了一个无限循环的阻塞方式。

ANR:如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现ANR。

你可能感兴趣的:(复习)