2014-09-11 3 views
0

서버에서 쉐이밍 캐스트를 통해 김서어 미디어를로드하는 응용 프로그램이 있습니다 (이전 개발자가 개발 한 클라이언트의 현재 안드로이드 응용 프로그램 코드가 제공됨).미디어 앱이 버퍼에 너무 오래 걸립니다.

Android Studio의 경우 logcat에 메인 스레드에 너무 많은 활동이 있다는 메시지가 표시됩니다. 이것은 스트리밍 할 라디오 채널을 선택할 때 발생합니다.

어떻게 이것을 배경 스레드로 옮기고 이것을 메인 스레드에서 꺼낼 수 있습니까 ??? ??? 대다수의 사용자가 스트림을로드 한 다음 대부분의 전화기에서 시간이 오래 걸린다 고 말합니다 (미국의 OnePlus One Android 휴대 전화는 절대로 시간 초과되지 않습니다. 항상로드되지만 - 오랜 시간이 걸릴 것입니다) .

일반적으로 어떤 사람이 나에게 훌륭한 포인터를 줄 수 있다면. AsyncTask를 사용하는 방법에 대해 읽었지 만,이를 수행하는 방법에 익숙하지 않아 응용 프로그램의 주요 재 작성이 발생할 우려가 있습니다.

감사합니다 !!! 워드 프로세서

ironmantis7x

+0

'[AsyncTask]에 익숙하지 않습니다.' 가장 쉬운 해결책은 AsyncTask의 설명서를 읽는 것부터 시작하는 것이 좋습니다. – njzk2

답변

1

: http://developer.android.com/reference/android/os/AsyncTask.html

은 AsyncTask를 이에서 다음과 같은 제네릭 진행 결과 (INT 형식)에 Params (URL) (롱)

을 부여 확장 자신의 클래스를 만듭니다 예를 들어 여러 파일을 다운로드 중입니다. 그런 다음

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

여전히 긴에 소요 어떤 이유로,이 스레드가 importent입니다 안드로이드를 알 수있는 경우 Android는 더 많은 시간을 갖기 위해 노력할 것입니다.

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

나는 이것을 시도 할 것이다. 이 게시 주셔서 감사합니다 !! – ironmantis7x

+0

나는 이제 모든 사람들에게 명확성을 위해 어떤 일이 일어나는지 보여주기 위해 그 자리에있는 앱 코드를 게시 할 것이다. – ironmantis7x

+0

물론,이 이벤트를 더 빠르게 만들 수있는 방법을 추가했습니다. –

관련 문제