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方法,不再做具体描述。