Je suis actuellement confronté au problème suivant: chaque fois que mon application Android est démarrée, elle doit exécuter un certain code d'initialisation. Sans ce code, toutes mes activités/services au sein de l'application ne fonctionneront pas correctement. Jusqu'ici, j'ai mis ce code d'initialisation dans une activité SplashScreen, que j'ai déclarée comme activité PRINCIPALE dans le manifeste. Une fois le code d'initialisation exécuté, je termine() l'écran de démarrage et démarre l'activité principale actuelle, c'est-à-dire une activité composée de plusieurs onglets, à partir desquels l'utilisateur peut atteindre plusieurs autres activités.Initialisation d'une application Android
Le problème est maintenant le suivant: lorsque mon application est mise en arrière-plan, après un certain temps et après le lancement d'autres applications, mon application/processus est tué. Lorsque je le relance à partir de l'écran d'accueil, Android restaure la pile d'activité (tâche) et appelle onCreate() sur eux. Cependant, l'activité de l'écran de démarrage et donc le code d'initialisation ne sont pas exécutés, ce qui entraîne une exception.
Je pourrais mettre maintenant le code d'initialisation dans onCreate() de l'application, cependant ceci a comme conséquence un écran noir jusqu'à ce que la méthode finisse.
Est-ce que quelqu'un a une idée, où et comment je peux initialiser correctement mon application au démarrage?
Code d'initialisation:
public void init() {
if (initialized) {
return;
}
// Initialize terms
List<Tag> tags= DynamicDao.loadAll(Tag.class);
int numTags = tags.size();
terms = new String[numTags];
for (int i = 0; i < numTags; i++) {
terms[i] = tags.get(i).getTag();
}
// Initialize document-term matrix
List<Item> items = DynamicDao.loadAll(Item.class);
createDocumentTermMatrix(items);
initialized = true;
}
Remarque: Un article a plusieurs étiquettes associées, dont j'ai besoin de créer un vecteur de document.
Lors de l'initialisation, je crée une matrice de doubles de taille 50x70 afin d'accélérer certains calculs par la suite. Ce calcul nécessite environ 2-3 secondes sur un Nexus One, 6 secondes pour un HTC Magic et encore un peu plus long sur l'émulateur. L'algorithme d'initialisation ne peut plus être optimisé. Finalement (mais je ne suis pas très convaincu de cette idée) je pourrais écrire les résultats de ce calcul dans un fichier au premier lancement de l'application et lire et juste mettre à jour à partir de là ... – Matthias
Ecrire 3500 doubles ne devrait pas prendre 3 secondes. Quelque chose semble faux – Falmarri
Je devrais peut-être donner quelques détails supplémentaires: cette matrice est une matrice de document Word, que je pré-compute en utilisant des entrées dans la base de données SQLite de l'application et que j'utilise pour calculer les similarités par la suite. – Matthias