2014-09-11 3 views
0

J'ai une application qui charge des médias fumants à partir d'un serveur via shout cast (j'ai reçu le code d'application Android actuel d'un client, il a été développé par un développeur précédent).l'application multimédia prend trop de temps à mettre en mémoire tampon

Dans Android Studio, je vois dans le logcat un message indiquant qu'il y a trop d'activités sur le thread principal. Cela se produit lorsque je sélectionne un canal radio à diffuser.

Comment puis-je déplacer cela à un fil de fond et de le retirer du fil principal ??? une majorité d'utilisateurs disent que l'application prend trop de temps à charger le flux et expire ensuite sur la plupart des téléphones (mon téléphone OnePlus One Android ici aux États-Unis ne cesse jamais, il charge toujours - mais cela prend un long temps) .

En général, si quelqu'un peut me donner quelques pointeurs ce serait génial. J'ai lu sur l'utilisation de AsyncTask, mais je ne suis pas familier avec la façon de le faire et je crains que cela entraînerait une réécriture majeure de l'application.

Merci !!!

ironmantis7x

+0

'Je ne suis pas familier avec [AsyncTask]'. La solution la plus simple serait de commencer par lire la documentation de AsyncTask. – njzk2

Répondre

1

De la documentation: http://developer.android.com/reference/android/os/AsyncTask.html

Créer votre propre classe qui étend AsyncTask Donnez aux génériques suivants Params (URL) Progrès (format int) Résultat (Long)

Dans ce exemple, ils téléchargent plusieurs fichiers. L'idée est qu'il est en cours d'exécution sur un thread différent:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { 
    protected Long doInBackground(URL... urls) { 
     int count = urls.length; 
     long totalSize = 0; 
     for (int i = 0; i < count; i++) { 
      totalSize += Downloader.downloadFile(urls[i]); 
      publishProgress((int) ((i/(float) count) * 100)); 
      // Escape early if cancel() is called 
      if (isCancelled()) break; 
     } 
     return totalSize; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     setProgressPercent(progress[0]); 
    } 

    protected void onPostExecute(Long result) { 
     showDialog("Downloaded " + result + " bytes"); 
    } 
} 

ensuite à utiliser:

new DownloadFilesTask().execute(url1, url2, url3); 

Si pour une raison quelconque, il faut encore longtemps, vous pouvez dire android que ce fil est importent , et Android va essayer de lui donner plus de temps pour fonctionner.

Thread.currentThread().setPriority(Thread.MAX_PRIORITY); 
+0

je vais essayer ça. merci de poster ceci !! – ironmantis7x

+0

Je vais poster le code de l'application qui est en place maintenant pour montrer à tout le monde ce qui se passe pour plus de clarté. – ironmantis7x

+0

Bien sûr, j'ai ajouté un moyen d'essayer de rendre cet événement plus rapide. –