J'ai 3 activités principales dans mon application jusqu'à présent, écran d'accueil, menu, jeu.
Les 3 ont des animations (l'écran d'accueil est très simplement une animation). Le problème survient lorsque je passe d'une activité à l'autre (et de nouveau à la précédente).
Par exemple, l'utilisateur est dans l'activité B
qui est un menu animé. Ils appuient sur Start et sont emmenés au jeu. Cependant, juste avant que l'activité du menu ne disparaisse (et pendant qu'elle disparaît), l'animation devient très hachée. De même, lorsque le jeu démarre, l'animation est très hachée pendant la première seconde environ.
Je charge/crée les bitmaps (et d'autres entités) dans le fichier de configuration de l'ordinateur. Surfaceview
le constructeur de la classe de chaque activité. Je crée des bitmaps à l'échelle et j'initialise d'autres variables nécessaires en remplissant des tableaux, etc. dans un fichier de type initialise()
dans la même classe. (J'invoque cette méthode dans onCreate()
de la classe d'activité correspondante).
Je suppose donc que cela a quelque chose à voir avec la manière, le moment et l'endroit où je charge mes bitmaps.
J'ai utilisé Allocation Tracker dans le DDMS, mais je n'y vois aucun problème (rien n'est créé qui n'a pas besoin de l'être).
GC est en cours d'exécution lorsque je quitte et entre dans les activités, donc cela pourrait être le problème.
Je ne sais pas comment contourner ce problème.
Est-ce une pratique courante de charger tous les bitmaps requis, etc., dès le début de l'application plutôt que de charger les bitmaps requis au début de chaque activité ? (Veuillez noter que rien du tout n'est créé dans ma boucle de jeu et que le problème ne se pose généralement qu'à l'entrée et à la sortie des activités). Si c'est le cas, lorsque je les crée dans mon activité initiale (disons l'écran d'accueil), comment puis-je ensuite les référencer à partir de toutes mes autres activités ?
J'ai fait des recherches sur ce sujet pendant longtemps (sur ce site et plus généralement sur le net) et j'ai essayé de le résoudre moi-même, mais je ne trouve pas de réponse claire.
Toutes mes activités suivent la structure ci-dessous...
public class OptionsActvity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
displayOptionsScreen = new OptionsScreen(this);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(displayOptionsScreen);
WindowManager w = getWindowManager();
Display d = w.getDefaultDisplay();
int width = d.getWidth();
int height = d.getHeight();
myApp MyAppSettings = (MyApp) getApplicationContext();
displayOptionsScreen.initialise(width, height);
}
}
public class OptionScreen extends SurfaceView implements
SurfaceHolder.Callback {
// set up / declare variables here
}
public OptionsScreen(Context context){
// Create bitmaps etc here
}
public void initialise(int w, int h) {
// Create scaled bitmaps here
// Initialise other values
}