2012-10-19 8 views
0

안녕하세요 내가 그 아래로 의도를 가지고 서비스를 호출 할 때 UI는 정지 서비스를는 안드로이드 : 의도

public void startAlarmService() { 
    Intent i = new Intent(); 
    i.setAction("me.application.AlarmService"); 
    startService(i); 
} 

확인란을 선택하면이 메소드가 호출을 시작합니다. 그러나 확인되면 UI가 5 초 동안 고정됩니다.

새 스레드를 실행하고 AsyncTask를 사용하여 위의 메서드를 호출하려고했지만 둘 다 작동하지 않고 5도 걸렸습니다. 예를 들어 진행 대화 상자를 넣고 UI가 멈추고 나서 진행 대화 상자를 표시하기 때문에 몇 초 후에 실행할 수 있습니다.

이 서비스를 시작할 때 UI가 멈추지 않도록하려면 어떻게해야합니까?

도움 주셔서 감사합니다.

편집 : 서비스 코드 : 비동기 작업을 사용하여 다운로드 부분 : 기본적으로

asyncDownload aCall = new asyncDownload(getApplicationContext(),this);    
boolean result = aCall.execute().get(); 
return result; 
+0

이 이름으로 작업을 처리하는 유효한 서비스가 있습니까? – Egor

+0

물론 물론 예상대로 서비스가 실행됩니다. – user1433460

+0

해당 서비스에서 정확히 무엇을합니까? 'Service' 클래스의 확장은 메인 UI 스레드에서 실행됩니다. – Luksprog

답변

0

먼저 AsyncTask 이상을 만들고이 스레드를 차단하는 get() 메서드를 사용하고 있습니다. 정상적으로 수행하십시오 - doInBackground(Params...)의 백그라운드 작업 후 get() 대신에 주 스레드에서 다시 호출되는 onPostExecute(Result)의 UI를 업데이트하십시오.

+0

get()을 제거하면 완벽하게 작동합니다. 감사합니다. 하지만 얻지 못하면 asyncTask에서 결과 값을 얻는 방법을 알려주시겠습니까? 서비스에서 asyncTask의 결과를 알아야합니다. asyncTask가 이미지를 다운로드하는 데 성공했는지 알 수 있도록 값이 필요합니다. 그렇지 않으면 내가 알람 서비스를 재설정해야합니다. OnPostExecute에서 알람 서비스를 재설정해야합니까? – user1433460

1

UI 스레드 즉, 같은 응용 프로그램의 활동과 같은 스레드에서 서비스 실행.
새 스레드에서 서비스를 실행하는 것이 좋은 해결책처럼 보입니다.

+0

정확하게, 문제는 주 스레드에서 서비스 자체 (줄 위)를 실행하는 것이 아니라 실제로 서비스가 생성 된 스레드를 사용한다는 것입니다 기본적으로 서비스 구현입니다. –

+0

하지만 asyncTask를 사용하여 모든 작업을 수행했습니다. IsyncTask는 올바른 일도하지 않습니까? 또한 새 스레드를 실행하여 서비스를 호출했지만 또한 고정 된 UI가있어 @FenixVoltres – user1433460

+0

네, AsyncTask의 onExecute는 별도의 스레드에서 실행되지만 서비스가 AsyncTask 외부에서 어떤 작업을 수행하는지 알지 못합니다. 나는 가장 가능성있는 문제를 지적하고있다. 확인/취약 확인하는 간단한 테스트. Log.d ("TAG", "service created") 만 수행하는 새로운 서비스를 생성하십시오. 및이 서비스로 교체하십시오. – Teovald

관련 문제