【标星star源码】【130的源码】【app 车位源码】bitmaputils源码

来源:edgexfoundry源码

1.图片三级缓存↙↙↙↙↙
2.oom 是什么意思
3.xutils3和xutils3什么区别

bitmaputils源码

图片三级缓存↙↙↙↙↙

       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 分数的标星star源码进程将会在内存不足时被杀掉。

       它打分的130的源码算法如下:

       某一个进程和它所有的子进程都占用了很多内存的将会打一个高分。

       为了释放足够的内存来解决这种情况,将杀死最少数量的进程(最好是一个进程)。

       内核进程和其他较重要的进程会被打成相对较低的分。

       上面打分的标准意味着,当 OOM killer 选择杀死的进程时,将选择一个使用大量内存,有很多子进程且不是app 车位源码系统进程的进程。

       简单来讲,oom-killer 的原则就是损失最小、收益最大,因此它会让杀死的脉冲波源码进程数尽可能小、释放的内存尽可能大。在数据库服务器上,MySQL 被分配的内存一般不会小,因此容易成为 oom-killer 选择的简单cms源码对象。

       “既然发生了 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。

文章所属分类:知识频道,点击进入>>