android分段讀取
1. Android 的幾種加密方式
Android 中的最常用得到有三種加密方式:MD5,AES,RSA.
1.MD5
MD5本質是一種散列函數,用以提供消息的完整性保護。
特點:
1.壓縮性:任意長度的數據,算出的MD5值長度都是固定的;
2.容易計算:從原數據計算出MD5值很容易;
3.抗修改性:對原數據進行任何改動,哪怕只修改一個位元組,所得到的MD5值都有很大的區別
4.強抗碰撞:已知原數據和其MD5值,想找到一個具有相同MD5值的數據(及偽造數據)是非常困難的;
2.RSA加密
RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。
RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。
3.AES加密
AES加密是一種高級加密的標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法。
2. androidmediaplayer默認是分段載入
這意味著它會從網路流中下載並緩沖較小的數據姿飢塊,並跡沖返在接收到足夠的數據後開始播放。當播放器緩沖區中的數據不足以支持連續播放時,它將嘗試下載更多的數據。這種邊下載判漏邊播放的方式旨在提高播放的穩定性和流暢性,在網路條件不理想或者網路速度不夠快的情況下,也能保證視頻可以順暢播放。不過也可能會導致初始載入時間稍長一些,因為需要先緩沖一段數據才能開始播放。
3. android怎樣加快ui的載入速度
1.減小主線程的阻塞時間
若一個操作耗時教長(超過5秒 用戶無響應5秒 網路和資料庫阻塞10秒 廣播接收者執行超過10秒會導致ANR),我們應該將其放入後台線程中執行,只在需要修改UI界面時通知主線程進行修改。
Android已經提供了AsynTask以實現從主線程生成新的非同步任務的方法。具體用法參見非同步任務。
2.提高Adapter和AdapterView的效率
(1)重用已生成過的Item View
(2) 添加ViewHolder
(3) 緩存Item的數據
(4)分段顯示
3.優化布局文件
如果我們的布局層次過多,那麼在我們用findViewById的時間必然會變多,一個變多可能不要緊,但是有很多調用必然會影響性能。
(1) 使用觀察布局的工具 Hierarchy Viewer
(2)使用布局優化工具: Layoutopt
(3)優化布局的層次結構
4.背景圖
某些時候,我們可能希望能夠盡可能多的提高Activity哪怕一點點的性能,這時候我們可以考慮優化Activity背景圖。
首先我們必須知道,在android的Activity中,不止有你使用的setContentView時使用的View,還包含一些其它的View。其根View是一個DecorView,你設置的View就包含在其中,id為content。
(1)使用getWindow().setBackgroundDrawable()
(2)自定義主題
創建文件res/vlaues/theme.xml
<resources>
<style name="Theme.CustomBackground" parent="android:Theme">
<item name="android:windowBackground">@null</item>
</style>
</resources>
可根據需要將windowBackground設置為null或你需要的背景圖
2.在<activity/>或者<application/>標簽中添加 android:theme="@style/Theme.CustomBackground"
5.使用ViewStub
ViewStub是一個看不見,輕量級的View。它沒有尺寸,也不會繪制以及以某種形式參與到布局中來。當只有調用Inflate之後其中的View才會被實例化,這意味著用ViewStub保留View層次結構代價是
(1) 延遲載入不常用的UI控制項
當某些控制項只在很少情況下才會使用,我們可以使用ViewStub來延遲載入,以提高UI載入速度及減小內存消耗。
[java] view plain
<span style="font-size:18px;">public class DelayLoadActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.delay_load);
Button btn = (Button) findViewById(android.R.id.button1);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setEnabled(false);
ViewStub stub = (ViewStub) findViewById(R.id.stub);
View inflated = stub.inflate();
}});
}
}
</span>
(2)提高改變布局的速度
需要使用的場景
界面需要頻繁切換
希望能提高切換速度
使用方法(以橫豎換屏為例)
1.設置Activity的android:configChanges屬性為keyboardHidden|orientation
2.為橫豎屏分別編寫不同的layout
3.創建一個layout,並包含兩個ViewStub(分別對應橫豎屏)
4.在橫豎屏,通過調用ViewStub.inflate創建當前View並將另外一個設為GONE
5.綁定並設置控制項的狀態
4. android開發怎麼分段去讀取位元組流,已知頭部是固定6個位元組,怎麼讀取頭部,
Android一般都是把圖片存儲到本地,然後在資料庫里存儲圖片的本地Url地址。
5. android上如何實現大圖片的分段切割顯示
有種場景,我們想將一個圖片切割成多個圖片。比如我們在開發一個拼圖的游戲,就首先要對圖片進行切割。
以下是封裝好的兩個類,可以實現圖片的切割。僅供參考和學習。
一個是ImagePiece類,此類保存了一個Bitmap對象和一個標識圖片的順序索引的int變數。
package arui319.blog.csdn.net;
import android.graphics.Bitmap;
public class ImagePiece {
public int index = 0;
public Bitmap bitmap = null;
}
一個是ImageSplitter類,有一個靜態方法split,傳入的參數是要切割的Bitmap對象,和橫向和豎向的切割片數。比如傳入的是3、3,則橫豎向都切割成3片,最終會將整個圖片切割成3X3=9片。
package arui319.blog.csdn.net;
import java.util.ArrayList;
import java.util.List;
import android.graphics.Bitmap;
public class ImageSplitter {
public static List<ImagePiece> split(Bitmap bitmap, int xPiece, int yPiece) {
List<ImagePiece> pieces = new ArrayList<ImagePiece>(xPiece * yPiece);
int width = bitmap.getWidth();
int height = bitmap.getHeight();
int pieceWidth = width / 3;
int pieceHeight = height / 3;
for (int i = 0; i < yPiece; i++) {
for (int j = 0; j < xPiece; j++) {
ImagePiece piece = new ImagePiece();
piece.index = j + i * xPiece;
int xValue = j * pieceWidth;
int yValue = i * pieceHeight;
piece.bitmap = Bitmap.createBitmap(bitmap, xValue, yValue,
pieceWidth, pieceHeight);
pieces.add(piece);
}
}
return pieces;
}
}
這里的切割,主要使用的是Bitmap對象的createBitmap方法,不再做具體描述。