我有一个通过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/