2012-11-09 5 views
1

저는 프래그먼트를로드해야하는 온라인 서비스를 사용하는 Android 앱에서 작업하고 있습니다. 기본적으로, 나는 메뉴와 같으며, 각 버튼은 아래의 Fragment를 대체합니다. 버튼을 클릭하면 프래그먼트가 교체되기 시작합니다. 그동안 키보드에서 다른 버튼을 누르면 응용 프로그램이 응답하지 않습니다. 대화 상자가 표시되면 대기 및 내 조각이 성공적으로로드됩니다. 저것을 막을 수있는 방법이 있습니까? 웹 서비스 때문에 내 응용 프로그램은 항상로드하는 데 몇 초가 걸립니다. 나는 AsyncTask를 사용할 수 있고 DoOnBackground 메서드에서 로딩을 완료 할 수 있다고 Google에서 읽었습니다. 작동하는지는 모르겠지만 시도를 할 수는 없습니다.보기를 변경하지 않기 때문에 시도 할 수도 없습니다. 그것은 오직 원래 스레드가 뷰를 바꿀 수있는 오류를 throw합니다 .. 그리고 나는 내 AsyncTask와 함께 서비스를 할 수없는, 그래서 내보기를로드 완료 서비스가 필요 .. 지금은 아이디어가 없어! 이 일을 할 수있는 방법이 있어야합니다 .. 나는 제안을 감사드립니다!ANR 대화 상자가 표시되지 않도록하는 방법 응용 프로그램이 응답하지 않습니다.

답변

11

그런 일이 발생하지 않도록하는 방법이 있습니까?

예 : 메인 애플리케이션 스레드에서 그리 오래 걸리지 마십시오. 가능성이 높은 범인 (디스크 I/O, 네트워크 I/O)을 식별하고 Traceview를 사용하여 다른 작업을 수행하는 데 너무 오래 걸리는지 알아 보려면 StrictMode을 사용하십시오.

웹 서비스 때문에 내 앱이로드되는 데 항상 몇 초가 걸립니다.

이는 백그라운드 스레드에서 수행되어야합니다.

나는 그것을 못하게 때문에, 즉 작동하는지 모르겠어요,하지만 난 시도조차 할 수없는 .. AsyncTask를를 사용하고 DoOnBackground 방법에 로딩을 완료 할 수 있다고 구글에서 읽을 내게는 당신이 onPostExecute() 방법에서보기를 업데이트하는 이유 the documentation for AsyncTask에 설명 된 바와 같이, 어느 견해

을 변경할 수 있습니다 만 원래의 스레드에 대한 오류가 발생합니다, 거기에보기를 변경합니다.

+0

감사합니다. 나는 이것을 시도 할 것이다 – ximena

+2

당신은이 대답을 받아 들여야한다! –

+2

네, 할 것입니다. – ximena

0

AsyncTask의 onPostExecute() 함수에서 ui를 변경해야합니다.

0

메인 thred의 컨텍스트에서 데이터베이스 작업이나 콘텐츠 공급자 작업을 절대로 실행하지 마십시오. 언젠가는 응답이없는 응용 프로그램 오류가 발생하게 될 것입니다. ANR은 좋은 습관이 아닙니다.

관련 문제