媒体应用程序需要很长时间来缓冲

时间:2014-09-11 20:33:32

标签: java android multithreading service

我有一个应用程序通过shout cast从服务器加载流媒体(我从客户端获得了当前的android应用程序代码。它是由以前的开发人员开发的。)

在Android Studio中,我在logcat中看到主线程上有太多活动的消息。当我选择要传输的无线电频道时会发生这种情况。

如何将此移动到后台线程并将其从主线程中移除? 大多数用户表示该应用程序需要很长时间来加载流,然后在大多数手机上超时(我在美国的OnePlus One Android手机永远不会超时。它总是加载 - 但确实需要花费很长时间)。

一般来说,如果有人可以给我一些很棒的指示。 我已经阅读过有关使用AsyncTask的内容,但我不熟悉如何做到这一点,我担心这会导致重新编写应用程序。

感谢!!!

ironmantis7x

1 个答案:

答案 0 :(得分:1)

来自文档:http://developer.android.com/reference/android/os/AsyncTask.html

创建自己的扩展AsyncTask的类 给出以下泛型参数(URL)进度(以int格式)结果(长)

在此示例中,他们正在下载多个文件。 这个想法是它在不同的线程上运行:

   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");
     }
 }

然后使用:

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

如果由于某种原因它仍然需要很长时间,你可以告诉android这个线程是重要的,Android会尝试给它更多的时间来运行。

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