我有一个应用程序通过shout cast从服务器加载流媒体(我从客户端获得了当前的android应用程序代码。它是由以前的开发人员开发的。)
在Android Studio中,我在logcat中看到主线程上有太多活动的消息。当我选择要传输的无线电频道时会发生这种情况。
如何将此移动到后台线程并将其从主线程中移除? 大多数用户表示该应用程序需要很长时间来加载流,然后在大多数手机上超时(我在美国的OnePlus One Android手机永远不会超时。它总是加载 - 但确实需要花费很长时间)。
一般来说,如果有人可以给我一些很棒的指示。 我已经阅读过有关使用AsyncTask的内容,但我不熟悉如何做到这一点,我担心这会导致重新编写应用程序。
感谢!!!
ironmantis7x
答案 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);