[英]Android what's the most efficient way to save and load images?
我有一個應用程序,用戶可以在其中從雲,內部存儲或外部存儲中選擇圖像。 然后,該應用程序將圖像保存到設備,然后將文件路徑存儲到sqlite數據庫。 然后,它稍后使用Picasso庫從文件路徑加載圖像。 我的問題是,當它打算從文件路徑加載圖像時,加載速度非常慢。 保存圖像后,可能需要一分鍾才能最終顯示它。
我的問題是:保存和加載用戶選擇的圖像的最有效方法是什么。 我希望它可以更快地加載圖像。
這是我的代碼:
獲取意圖結果供用戶選擇圖像的方法
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK)
{
if(requestCode == 1)
{
try {
if (bitmap != null)
{
bitmap.recycle();
}
InputStream stream = getContentResolver().openInputStream(data.getData());
bitmap = BitmapFactory.decodeStream(stream);
stream.close();
Picasso.with(getBaseContext()).load(data.getData()).fit().centerInside().into(imageButton);
imageButton.setBackground(null);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
pictureSelected = true;
SaveImageTask saveBitmap = new SaveImageTask(bitmap);
saveBitmap.execute();
}
}
異步任務進行圖像保存
private class SaveImageTask extends AsyncTask<Void, Integer, Boolean> {
private Bitmap bitmap;
SaveImageTask(Bitmap bitmap) {
this.bitmap = bitmap;
}
@Override
protected Boolean doInBackground(Void...params) {
// Create a media file name
Calendar c = Calendar.getInstance();
String timeStamp = new SimpleDateFormat("ddMMyyyy_HHmm").format(c.getTime());
String mImageName = "MT_"+ timeStamp +".jpg";
String albumName = "My App";
File file = null;
String state = Environment.getExternalStorageState();
// If there is external storage, save it in the pictures album. If not, save on internal storage
if(Environment.MEDIA_MOUNTED.equals(state))
{
file = new File(addEdit.this.getExternalFilesDir(
Environment.DIRECTORY_PICTURES), albumName);
if(!file.mkdirs())
{
file = new File(addEdit.this.getFilesDir(), mImageName);
}
}
else
{
file = new File(addEdit.this.getFilesDir(), mImageName);
}
OutputStream fOut = null;
try {
fOut = new FileOutputStream(file);
fOut.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
try {
FileOutputStream fos = new FileOutputStream(file);
filePath = file.getAbsolutePath();
Log.v("Filepath", filePath);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
return false;
}
catch(IOException e)
{
e.printStackTrace();
return false;
}
return true;
}
protected void onProgressUpdate(Integer... progress) {
}
protected void onPostExecute(Boolean success) {
}
}
我如何加載文件路徑
if(person.getImage() != null)
{
//convert byte to bitmap take from contact class
File imgFile = new File (person.getImage());
if(imgFile.exists())
{
Picasso.with(getBaseContext()).load(imgFile).fit().centerInside().into(imageView);
}
}
任何建議將不勝感激。 謝謝。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.