Junior — Middle
Quais razões tornam a transmissão de um objeto Bitmap através de um Intent pouco prática, e quais alternativas existem para transferir imagens entre componentes?
sobes.tech IA
Resposta da IA
Transmitir um objeto Bitmap através de um Intent no Android não é aconselhável por várias razões:
- Tamanho de dados grande: Bitmap pode ocupar muita memória, levando a ultrapassar o limite de tamanho do Intent (geralmente cerca de 1 MB), causando um erro TransactionTooLargeException.
- Desempenho: A serialização e desserialização de Bitmap no Intent desacelera a aplicação.
- Risco de fugas de memória: Gestão incorreta de Bitmap pode levar a fugas.
Alternativas para transmitir imagens entre componentes:
- Transmitir URI ou caminho do arquivo: Guardar a imagem no armazenamento interno ou externo, e passar o caminho ou URI através do Intent.
- Uso de Singleton ou armazenamento global: Guardar o Bitmap na memória em um campo estático ou via ViewModel (no caso de Activity/Fragment).
- Uso de base de dados ou cache: Guardar a imagem numa base de dados ou cache, e passar o identificador.
Exemplo de transmissão de URI:
// Guardar Bitmap num arquivo
File file = new File(context.getCacheDir(), "image.png");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();
// Passar URI via Intent
Intent intent = new Intent(context, TargetActivity.class);
intent.putExtra("image_uri", Uri.fromFile(file).toString());
startActivity(intent);
Na TargetActivity, pode obter o URI e carregar a imagem do arquivo.