Sobes.tech
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:

  1. Transmitir URI ou caminho do arquivo: Guardar a imagem no armazenamento interno ou externo, e passar o caminho ou URI através do Intent.
  2. 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).
  3. 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.