更快地在默认库中打开缓存位图的方法

时间:2011-10-24 02:14:08

标签: android optimization bitmap android-intent gallery

我编写了一些代码,当单击列表视图时,该位置的图像将存储到外部存储器,然后发送文件路径字符串,以便在默认库中查看图像。唯一的问题是需要花费很长时间(我在霹雳上说的时间超过10秒)。

我尝试过的: 1.将位图存储在内部存储器中 2.降低位图的质量

以下是代码:

@Override
                public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
                    if(position>0){
                        Bitmap bmp =adapter.getBitmap(adapter.getData(position-1));
                        if(bmp!=null){
                            //String path = context.getCacheDir().getAbsolutePath() + "/view.png"; 
                            //File f = new File(context.getCacheDir().getAbsolutePath(),"MemeCache");
                            //if(!f.exists())
                            //    f.mkdirs();
                            String path = android.os.Environment.getExternalStorageDirectory().getAbsolutePath() + "/view.png"; 
                            Toast.makeText(context, "opening in gallery", Toast.LENGTH_SHORT).show();
                            File file = new File(path); 
                            FileOutputStream fos = null;
                            try {
                                fos = new FileOutputStream(file);
                                bmp.compress(CompressFormat.PNG, 100, fos ); 
                                fos.close(); 
                            } catch (FileNotFoundException e) {
                                e.printStackTrace();
                            } catch (IOException e) {
                                e.printStackTrace();
                            }
                            Intent intent = new Intent();
                            intent.setAction(android.content.Intent.ACTION_VIEW);
                            intent.setDataAndType(Uri.fromFile(new File(path)), "image/png");
                            //intent.setDataAndType(Uri.fromFile(f), "image/png");
                            activity.startActivity(intent);
                        }else{
                            Toast.makeText(context, arg0.getItemAtPosition(position).toString() +"is HaAAACkSS!!!!", Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            });

1 个答案:

答案 0 :(得分:0)

可能有所帮助的一些事情:

1)为您的代码添加一些计时器或工具,以确切地查看您一直在花费的位置:将位图保存到SD卡,启动意图或其他完全。

2)一旦你添加了定时器并且可以测量性能,你可以看到缩小图像或将图像存储在不同的地方是否有帮助,如果有的话。在某些设备上,内部存储位于SD卡本身上。

3)根据您的程序,您可能需要考虑将文件预先保存到SD卡(可能在后台),以便在用户尝试使用时可能已保存在画廊中查看它们。