Сохранить изображение в песочницу по URL
Нужно загрузить изображение без использования сторонних библиотек(picasso, glide). Я попробовал сделать это вот так. так как я новичок, то всего еще не понимаю. после нажатия кнопки, прогрессдиалог появляется и тут же исчезает. причем UI тормозится на какое-то время. Студия сама об этом говорит(Skipped 541 frames! The application may be doing too much work on its main thread.) Я же использую AsyncTask, почему это влияет на UI? Подскажите методы для загрузки изображения таким образом.
protected void saveImage(Context context, Bitmap bitmap, String imageName) {
FileOutputStream fos;
try {
fos = context.openFileOutput(imageName, Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
} catch (Exception e) {
Log.d("saveImage", "Exception 2");
e.printStackTrace();
}
}
private Bitmap downloadImage(String mUrl) throws IOException {
HttpURLConnection connection = null;
InputStream input = null;
try {
URL url = new URL(et_enter_URL.getText().toString());
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
input = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(input);
return bitmap;
} catch (IOException ioex) {
ioex.printStackTrace();
return null;
} finally {
connection.disconnect();
}
}
private class DownloadTask extends AsyncTask<String, Void, Bitmap> {
private String TAG = "Download image";
protected void onPreExecute() {
super.onPreExecute();
mProgressDialog.show();
}
@Override
protected Bitmap doInBackground(String... strings) {
try {
return downloadImage(strings[0]);
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
mProgressDialog.dismiss();
saveImage(getApplicationContext(), result, "myImage.png"+System.currentTimeMillis()/1000);
Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show();
}
}