singleTask模式,當(dāng)啟動(dòng)這個(gè)實(shí)例時(shí),如果棧內(nèi)存在該實(shí)例會(huì)令其頂部的所有的實(shí)例出棧,并復(fù)用該實(shí)例。
對(duì)稱加密,就是加密和解密數(shù)據(jù)都是使用同一個(gè)key,這方面的算法有DES。
非對(duì)稱加密,加密和解密是使用不同的key。發(fā)送數(shù)據(jù)之前要先和服務(wù)端約定生成公鑰和私鑰,使用公鑰加密的數(shù)據(jù)可以用私鑰解密,反之。這方面的算法有RSA。ssh 和 ssl都是典型的非對(duì)稱加密。
RecyclerView性能優(yōu)化
1、onBindViewHolder不做邏輯運(yùn)算等操作
2、DiffUtil的使用
3、減少xml文件inflate時(shí)間,利用代碼生成view
4、如果item高度是固定的話,可以使用RecyclerView.setHasFixedSize(true);
5、如果子RecyclerView具有相同的adapter,那么可以設(shè)置RecyclerView.setRecycledViewPool(pool)來(lái)共用一個(gè)RecycledViewPool
(如果LayoutManager是LinearLayoutManager或其子類,需要手動(dòng)開(kāi)啟這個(gè)特性:layout.setRecycleChildrenOnDetach(true))
6、用空間換時(shí)間,來(lái)提高滾動(dòng)的流暢性。
recyclerView.setItemViewCacheSize(20);
recyclerView.setDrawingCacheEnabled(true);
recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
7、設(shè)置RecyclerView.addOnScrollListener()和onViewRecycled;來(lái)在滑動(dòng)過(guò)程中或移除手機(jī)屏幕后停止加載的操作。
8、設(shè)置adapter.setHasStableIds(true),并重寫(xiě)getItemId()來(lái)給每個(gè)Item一個(gè)唯一的ID,一樣的model數(shù)據(jù)不會(huì)重復(fù)加載
主線程中的Looper.loop()死循環(huán)為什么不會(huì)導(dǎo)致ANR?
一個(gè)程序的 main 方法執(zhí)行完成, 便代表著這個(gè)程序運(yùn)行結(jié)束, 那么要使 application 一直得到運(yùn)行,直到用戶退出才結(jié)束程序, 那么我們勢(shì)必得讓這個(gè)線程一直運(yùn)行下去不能結(jié)束, 否則一個(gè)APP 剛啟動(dòng), main 方法結(jié)束,直接退出, 那程序也就結(jié)束了,那如何讓一個(gè)線程一直運(yùn)行呢?這里就用了一個(gè)無(wú)限循環(huán)的阻塞方式。
ANR:如果應(yīng)用程序主線程(即UI線程)在超時(shí)時(shí)間內(nèi)對(duì)輸入事件沒(méi)有處理完畢,或者對(duì)特定操作沒(méi)有執(zhí)行完畢,就會(huì)出現(xiàn)ANR。