1.å¾çä¸çº§ç¼åâââââ
2.oom 是什么意思
3.xutils3åxutils3ä»ä¹åºå«
å¾çä¸çº§ç¼åâââââ
private final LruCachememorycacle;
public MemonryCacleUtiles() {
//åºç¨ç¨åºä½¿ç¨çæ大å å
int maxmemopry = (int) Runtime.getRuntime().maxMemory();
//ç¼åç大å°
int cacsesize = maxmemopry /8;
//é»è®¤è¿åçå¾çæ°é
memorycacle =new LruCache(cacsesize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
};
}
//å¾çä¿åå°ç¼å
public void saveBitmapToMemoryCache (String path,Bitmap bitmap){
memorycacle.put(path,bitmap);
}
//ä»ç¼åä¸è·åå¾ç
public Bitmap getBitmapToMemoryCacle (String path) {
return memorycacle.get(path);
}
}
private Stringpath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/NewPhto";
//ä¿åå°SDå¡ä¸
public void saveBitmapToDiskCache (String pathurl,Bitmap bitmap)throws UnsupportedEncodingException {
//对å¾çè¿è¡MD5å å¯
String filename = MD5Utils.getEncryption(pathurl);
//å建ä¸ä¸ªæ件
File file =new File(path,filename);
//å°å¾çä¿åå°æ件ä¸
try {
bitmap.compress(Bitmap.CompressFormat.JPEG,,new FileOutputStream(file));
}catch (Exception e) {
e.printStackTrace();
}
}
//è·åç£çä¸çå¾ç
String filername = MD5Utils.getEncryption(pathurl);
File file =new File(path,filername);
Bitmap bitmap =null;
try {
BitmapFactory.decodeStream(new FileInputStream(file));
}catch (FileNotFoundException e) {
try {
bitmap = BitmapFactory.decodeStream(new FileInputStream(file));
}catch (FileNotFoundException e1) {
}
}
return bitmap;
}
}
MD5å å¯
throws UnsupportedEncodingException {
String result ="";
if (originString !=null) {
try {
// æå®å å¯çæ¹å¼ä¸ºMD5
MessageDigest md = MessageDigest.getInstance("MD5");
// è¿è¡å å¯è¿ç®
byte bytes[] = md.digest(originString.getBytes("ISO-1"));
for (int i =0; i < bytes.length; i++) {
// å°æ´æ°è½¬æ¢æåå è¿å¶å½¢å¼çå符串 è¿éä¸0xffè¿è¡ä¸è¿ç®çåå æ¯ä¿è¯è½¬æ¢ç»æ为ä½
String str = Integer.toHexString(bytes[i] &0xFF);
if (str.length() ==1) {
str +="F";
}
result += str;
}
}catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
return result;
}
private DiskCacleUtilesdiskCacleUtiles;
private MemonryCacleUtilesmemonryCacleUtiles;
public NewsWork(DiskCacleUtiles diskCacleUtiles, MemonryCacleUtiles memonryCacleUtiles) {
this.diskCacleUtiles = diskCacleUtiles;
this.memonryCacleUtiles = memonryCacleUtiles;
}
public void exeute (String path, ImageView imageView) {
BitMapTask bitMapTask =new BitMapTask();
bitMapTask.execute(path,imageView);
}
class BitMapTaskextends AsyncTask{
private Stringurlpath;
private ImageViewimageView;
private Bitmapbitmap;
@Override
protected Bitmap doInBackground(Object... objects) {
urlpath = (String) objects[0];
imageView = ((ImageView) objects[1]);
try {
bitmap = downloadbitmap();
}catch (Exception e) {
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
if (bitmap !=null) {
//设置å¾ç
imageView.setImageBitmap(bitmap);
memonryCacleUtiles.saveBitmapToMemoryCache(urlpath,bitmap);
try {
diskCacleUtiles.saveBitmapToDiskCache(urlpath,bitmap);
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
super.onPostExecute(bitmap);
}
private Bitmap downloadbitmap()throws Exception {
URL url =new URL(urlpath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
if (connection.getResponseCode() ==) {
InputStream inputStream = connection.getInputStream();
BitmapFactory.Options options =new BitmapFactory.Options();
//è·ååå¾ç大å°
options.inJustDecodeBounds=true;
//设置å缩çæ¯ä¾
options.inSampleSize=2;
//å次解æå¾ç设置为false
options.inJustDecodeBounds=false;
Bitmap bitmap = BitmapFactory.decodeStream(inputStream,null,options);
return bitmap;
}
return null;
}
}
private MemonryCacleUtilesmemonryCacleUtiles;
private DiskCacleUtilesdiskCacleUtiles;
private NewsWorknewsWork;
public BitMapUtils() {
this.memonryCacleUtiles =new MemonryCacleUtiles();
this.diskCacleUtiles =new DiskCacleUtiles();
this.newsWork =new NewsWork(diskCacleUtiles,memonryCacleUtiles);
}
public void showBitmap(String path, ImageView imageView) {
Bitmap bitmap =memonryCacleUtiles.getBitmapToMemoryCacle(path);
if (bitmap !=null) {
imageView.setImageBitmap(bitmap);
return;
}
try {
bitmap =diskCacleUtiles.getBitmapCacle(path);
}catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
if (bitmap !=null) {
imageView.setImageBitmap(bitmap);
return;
}
newsWork.exeute(path,imageView);
}
oom 是什么意思
OOM Killer(Out of Memory Killer) 是当系统内存严重不足时 linux 内核采用的杀掉进程,释放内存的机制。OOM Killer 通过检查所有正在运行的进程,然后根据自己的算法给每个进程一个 badness 分数,拥有最高 badness 分数的android头像上传源码进程将会在内存不足时被杀掉。
它打分的agYLC源码算法如下:
某一个进程和它所有的子进程都占用了很多内存的将会打一个高分。
为了释放足够的内存来解决这种情况,将杀死最少数量的进程(最好是一个进程)。
内核进程和其他较重要的进程会被打成相对较低的分。
上面打分的标准意味着,当 OOM killer 选择杀死的进程时,将选择一个使用大量内存,有很多子进程且不是renderToString源码系统进程的进程。
简单来讲,oom-killer 的原则就是损失最小、收益最大,因此它会让杀死的selectlist源码进程数尽可能小、释放的内存尽可能大。在数据库服务器上,MySQL 被分配的内存一般不会小,因此容易成为 oom-killer 选择的demoym源码对象。
“既然发生了 OOM,那必然是内存不足,内存不足这个问题产生原因很多。
首先第一个就是 MySQL 自身内存的规划有问题,这就涉及到 mysql 相应的配置参数。
另一个可以想到的原因就是一般部署 MySQL 的服务器,都会部署很多的监控和定时任务脚本,而这些脚本往往缺少必要的内存限制,导致在高峰期的时候占用大量的内存,导致触发 Linux 的 oom-killer 机制,最终 MySQL 无辜躺枪牺牲。”
xutils3åxutils3ä»ä¹åºå«
åºå«å¦ä¸ï¼1ãæ°æ®åºæ¹é¢ï¼ä¸¤è 注解æ å°ä¸å
xUtils2ä¸ @Table(name="stu",execAfterTableCreated ="" )ï¼èxUtils3ä¸ç´æ¥æ¯ä»£æ¿äºonCreatedã
2ãæ°æ®åºå建åæ¥è¯¢ææ¹å¨ï¼ä½åºæ¬è¿æ¯ç¸å
xutils2ä¸db.findFirst(Selector.from(Parent.class)ãwhere.....èxUtils3ä¸åæ¯db.selector(Parent.class).where(....).findFirst()ï¼ä½æ¯éé¢åºæ¬çæ¡ä»¶ä¾å¦whereï¼whereBuilderçåæ°è¿æ¯æ²¡åçã
3ãç½ç»æä½æ¹é¢ä¸å
xUtils3æ¯ç´æ¥x.image().bind..æè x.http().post()çå代äºhttp.send(method,url,callback)ã
4ãè§å¾æ¹é¢ä¸å
xutils3ä¸@Event()代æ¿äº@onClick(),èä¸ä¸é¢çprivate代æ¿äºpublicã