/ / Descarregue rapidamente bitmaps da memória - java, android, bitmap

Descarregue rapidamente os bitmaps da memória - java, android, bitmap

Estou criando este jogo Android em Java. Eu tenho muitas imagens, mas não preciso usá-las todas de uma vez, então criei uma classe do Resource Manger que cuida dos Bitmaps que estão em uso. No entanto, achei muito lento para limpar o Bitmap atualmente estou fazendo algo parecido com isto:

bitmap.recycle()
bitmap = null

System.gc (also tried Runtime.getRuntime().gc())

Em primeiro lugar, existe alguma maneira de descarregar os bitmaps mais rapidamente da memória ou é possível verificar de alguma forma se eles realmente estão limpos para que eu possa fazer com que a tela de carregamento dependa disso também?

Respostas:

1 para resposta № 1

Não há garantia de que o coletor de lixo seja realmente executado quando tentarmos System.gc () como gc () espera certas pré-condições comofome de recursos. Portanto, é óbvio que chamar gc () está apenas desperdiçando ciclos críticos da CPU. Como desenvolvedor, podemos criar objetos desnecessários para o gc colecionáveis, anulando as referências.

Existem algumas técnicas de otimização que podem ser úteis ao criar um sistema de jogo (jogo).

  1. Use textura. Aqui está um exemplo.

  2. Use Sprite e SpriteSheets (fornece menossobrecarga para o sistema do que carregar bitmaps individuais). existem muitos mecanismos de jogos de código aberto que usam isso. Se você não quiser usá-los, tenha uma idéia de como criar do zero a partir dessas fontes.

  3. Use estes documentos padrão do Android para saber como Carregando Bitmaps Grandes Eficientemente e Cache de bitmaps para melhor uso do bitmap. A idéia é que, quando o dispositivo do usuário não for eficiente o suficiente para lidar com a quantidade de processamento e / ou a memória for menor para o seu jogo, você sempre poderá reduzir o bitmap (comprometer a qualidade para obter uma melhor resposta).

  4. Sempre teste seu aplicativo contra problemas de vazamento de memória. Aqui está um bela postagem isso vai ajudar.

  5. Mantenha os itens InMemory (não solte uma vez usados) que são usados ​​várias vezes dentro do jogo na mesma cena.O motivo é que leva muito tempo para carregar imagens na memória.

Espero que isso ajude você.


0 para resposta № 2

Como SylvainL disse, System.O gc and friends coleta o lixo completo e pode ser bem lento. A máquina Java executa o GC periodicamente e o período é ajustado dependendo da quantidade de memória livre disponível em um determinado momento.

A melhor opção para mim é usar algum tipo de bitmappool: ter um conjunto de instâncias de bitmap pré-fabricadas que você pode adquirir e liberar no pool e gerenciar instâncias de buffer em um cache aplicando políticas de LRU.

Com o ajuste adequado, você pode obter custo zero comcriando e destruindo instâncias de Bitmap à medida que elas são agrupadas, e as instâncias de buffer que contêm dados de bitmap serão carregadas dinamicamente e descarregadas da memória, dependendo do uso.