2014-02-24 7 views
0

Android에서 여러 가지 백그라운드 작업을 수행하려면 어떻게해야합니까? 내 활동에 세 개의 체크 박스가 있습니다. 이미지, 오디오 및 비디오. 그래서 나는 3 개의 긴 배경 작업 (서로 독립)을해야한다. 그래서 이미지 업로드를위한 서비스 클래스를 작성했습니다. 비디오 및 오디오를 업로드하는 두 번째 및 세 번째 작업에 대해 두 가지 서비스 클래스를 추가해야합니까? 사용자가 한 번에 3 개의 상자를 확인하면이 세 가지 작업을 수행하는 가장 좋은 방법은 무엇입니까?android 여러 작업을위한 단일 서비스

두 번째 질문은 누군가 긴 처리 백그라운드에서 비동기 작업을 사용하고있는 것을 보았습니다. 서비스를 사용하고 있다면 왜 비동기 작업이 필요한지 궁금합니다. 이러한 작업을 위해 서비스 내부에서 asynctask를 사용하는 것이 더 좋은 방법일까요?

답변

0

서비스는 주 스레드에서 실행됩니다. 서비스가 다른 스레드에서 실행된다고 생각하는 것은 큰 실수입니다. 그래서 AsyncTask() 또는 Runnable() 또는 Thread()가 필요합니다.

그래서 이미 서비스를 만들기로 결정했다면 가장 좋은 방법은 서비스 안에 1, 2 또는 3 개의 스레드를 생성하는 것입니다.

하지만 처음부터 서비스를 사용하는 이유는 무엇입니까? 응용 프로그램이 포 그라운드에 있지 않더라도 서비스가 작동합니다. 그래서 서비스를 전혀 필요로하지 않을 수도 있습니다. 활동 자체에 백그라운드 스레드를 만들 수 있습니다.

+0

그래, 나는 백업 이미지 또는 비디오를 매번 유지하기를 원하기 때문에 서비스가 필요하다. 그래서이 세 가지 업무에 세 가지 서비스를 사용할 수 있습니까? 더 나은 접근 방식입니까? 또는 서비스 내부에 세 개의 스레드를 만들 수 있습니까? – hellosheikh

+0

3 개의 스레드가있는 단일 서비스를 사용하고 있습니다. 3 개의 서비스를 갖는 것보다 서비스 내에 3 개의 스레드 로직을 캡슐화하는 것이 훨씬 쉽습니다. – Merlevede

+0

ok 나는 귀하의 조언을 다음 – hellosheikh

0

서비스는 장기간 백그라운드 작업을 위해 설계되었습니다. 서비스의 유스 케이스는 앱이 백그라운드에서 실행되는 것입니다. 또는 작업 사이를 전환하는 동안 작업이 종료되지 않습니다.

하지만 UI 스레드에서 액티비티처럼 실행됩니다. 그래서 UI 스레드를 차단하지 않기 위해 스레드 또는 AsyncTask를 사용해야합니다. 하나의 서비스에서 서로 다른 작업에 대해 독립적 인 스레드/비동기 태스크가있는 것이 좋습니다. 귀하의 경우, 모든 체크 박스는이 서비스에서 다른 스레드를 실행할 수 있습니다.

+0

잘하기 전에 나는 asynctask를 사용하여 업로드하고 있습니다. 하지만 내 응용 프로그램이 느려지는 경우 가끔 체크 박스가 멈추고 때로는 강제로 닫기 메시지가 표시됩니다. – hellosheikh

+0

이 경우에는 무슨 일이 벌어지는 지 알 수있는 관련 코드를 질문에 추가하십시오. –

관련 문제