J'ai essayé d'optimiser mon application de thread unique qui charge un tas de tuiles qui composent un grand bitmap. L'application devenait très lente quand elle chargerait les nouvelles tuiles dans la mémoire du système. Im regardant maintenant en essayant d'utiliser des tâches asynchrones à cet effet. L'application détecte quelle mosaïque est en haut à gauche dans une méthode appelée par onDraw, crée une chaîne qui contient le chemin de l'image dans le dossier Assets, puis vérifie si l'image bitmap est nulle avant le dessin. S'il est nul, il le chargera en mémoire. Mon idée était de traiter le bitmap dans DoBackground, et dans postExecute de déclencher une vue invalidate pour afficher le bitmap chargé async. Quelques questions:Optimisation du chargement de bitmap à l'aide de aSyncTask
1.) puis-je exécuter ma tâche aSync pour chaque bitmap? (cette instruction: new myAsyncTaskManager() .execute (bitmapPath), sinon, quelle est la meilleure façon de procéder, puisque la seule chose que fait aSync est de charger des bitmaps dans la mémoire?
2.) Est-il possible? définir la priorité aSyncTask si les bitmaps se chargent trop lentement?
3.) Existe-t-il une meilleure façon de procéder? Je suis certain que c'est le chargement de bitmap, et non le dessin de toile qui ralentit l'application.
Mon code temporaire Async:
private class myAsyncTaskManager extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... bitmapPath) {
Log.e("sys","i ran using aTask");
try {
bitmapArray[rectBeingDrawn] = BitmapFactory.decodeStream(assetManager.open(imagePathToLoad));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
}
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
mCampusMap.invalidate();
}
}
Il y a 416 tuiles. Il y a en moyenne 15 bitmaps dessinés pour une haute résolution. comme mon droide avec une résolution de 854 par 480, et il chargera généralement 5 bitmaps dans la mémoire pendant que vous faites défiler vers le bas. Donc, si je devais aller sur la route du fil, j'appellerais effectivement le fil pour charger le bitmap? Je ne pense pas que je doive retourner quoi que ce soit puisque le thread d'interface utilisateur dessine automatiquement les bitmaps une fois qu'il détecte qu'ils ne sont pas NULL. Je vois cela en exécutant myThread.run(); plus tôt ne travaillait pas aussi bien que j'espérais ha. – jfisk
Je suis aussi confronté au même problème, une solution brillante pour cela? – zIronManBox