Более быстрый способ открывать кэшированные растровые изображения в галерее по умолчанию - PullRequest
1 голос
/ 24 октября 2011

Я написал немного кода, что при нажатии на просмотр списка изображение в этом месте сохраняется во внешней памяти, а затем отправляется строка пути к файлу с намерением просмотреть изображение в галерее по умолчанию.Единственная проблема заключается в том, что это занимает очень много времени (я говорю 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 голосов
/ 24 октября 2011

Некоторые вещи, которые могут помочь:

1) добавить некоторые таймеры или инструментарий к вашему коду, чтобы точно определить, на что вы тратите все время: сохранение растрового изображения на SD-карте, запуск намерения или что-то ещееще полностью.

2) После того, как вы добавили таймеры и можете измерить производительность, вы можете увидеть, помогает ли уменьшение изображения или сохранение изображения в другом месте, и если да, то насколько.На некоторых устройствах внутреннее хранилище находится на самой SD-карте.

3) В зависимости от вашей программы вы можете подумать о предварительном сохранении файлов на SD-карту (возможно, в фоновом режиме), чтобы они были * 1007.* вероятно уже сохранено к тому времени, когда пользователь пытается просмотреть их в галерее.

...