java - 媒体应用程序缓冲时间太长

标签 java android multithreading service

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

在 Android Studio 中,我在 logcat 中看到一条消息,表明主线程上的 Activity 太多。当我选择要播放的广播 channel 时会发生这种情况。

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

总的来说,如果有人能给我一些指示,那就太好了。 我已经阅读过有关使用 AsyncTask 的内容,但我不熟悉如何执行此操作,并且我担心这会导致应用程序的重大重写。

谢谢!!!

铁螳螂7x

最佳答案

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

创建您自己的扩展 AsyncTask 的类 给出以下泛型 Params(URL) Progress(Int format) Result(Long)

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

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

关于java - 媒体应用程序缓冲时间太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25796441/

相关文章:

java - JBoss REST URL 不起作用

java - 如何根据内容找出未显示的 JPanel 的首选大小?

java - 检查 smoothScrollToPosition 何时完成

c# - Hook 事件 Outlook VSTO 在主线程上继续工作

python - 如何在与主程序不同的线程中编写套接字服务器(使用gevent)?

java - JTextArea 中正在执行写入操作

java - 在 Java 中使用 pow() 方法

java - Java 单例执行器

android - 在 ListView 适配器中从我的应用程序打开电子邮件应用程序

android - 如何通过EditText过滤ListView