*서비스(Service) : 화면(UI) 없이 동작하는 프로그램을 말함
- 다른 말로 데몬(Daemon), 백그라운드 프로세스(Background Process)라고 함
-액티비티 응용프로그램은 화면(액티비티)이 종료되면 동작하지 않지만
서비스는 ㅂㄱ그라운드에서 실행되므로 화면과 상관없이 계속 동작함
(V3, 알약, 카톡 프로그램, 물론 서비스도 상황에 따라 죽을 수 있음)
-서비스는 매니페스트 파일 (AndroidManifest.xml)안에 <service>태그를 이용하여 선언
-서비스는 다른 구성 요소들처럼 메인 스레드에서 동작
-> 따라서 CPU를 많이 쓰거나 대기 상태(blocking)를 필요로 하는 작업들은
스레드를 새로 만들어 주어야 함.
*서비스 3가지
- 포그라운드 서비스 : 알림창에 서비스가 실행 중임을 표시하며 강제 종료되지 않음.
- 백그라운드 서비스 : 사용자에게 보이지 않는 백그라운드에서 수행하며 강제 종료 가능함.
- 바인드 서비스 : bindService()호출하여 클라이언트 -서버로 상호 작용함
-API 26 이상에서는 백그라운드 서비스를 제한함 -> 포그라운드 서비스로!
-> 권한 설정
-> <uses-perimission android:name="android.permission.FOREGROUND_SERVICE"/>
-포그라운드 서비스 실행
if(Build.VERSION.SDK_INT > VERSION_CODES.O) startFOregroundService(this)
else startService(this)
*서비스 생명주기
*서비스 작성
(1) 서비스 클래스 작성
public class MusicService extends Service{
}
(2)AndroidManifest.xml <application> 안에 등록
<service .../>
(3) 서비스 실행 및 종료
Intent intent = new Intent(this, MusicService.calss);
startService(intent);
...
stopService(intent);
/////////////////////////////////////////////////////////////////////////////////////////
(1) 서비스 클래스 작성
public class MusicService extends Service {
IBinder mB
*스레드와 서비스 차이
-서비스는 모든 액티비티 종료 후에도 기능이 동작하고 다른 패키지에서도 사용 가능함
*서비스 : IntentService -> JobIntentService
-서비스 상속 받음, 순차적 처리, 긴 작업 처리 가능(10분 내로..)
-Queue 가 모두 비면 종료 ! 자신 업무가 끝나면 종료되는 특징
*MusicService 작성
-[New] - [jaa Class] -> [Create New Class]에서 MusicService
- /res/raw/song1.mp3 추가
*브로드캐스트 리시버(BR, Broadcast Receiver)
-안드로이드는 문자 메시지 도착, 배터리 방전, SD카드 탈부착, 네트워크 환경
변화 등이 발생하면 방송(Broadcast) 신호를 보내는데, 이런 신호를 받아서 처리하는 것이 리시버임
-브로드 캐스트 리시버의 대표적인 응용은 배터리 상태 확인
*브로드캐스트 리시버
-수신자가 매니페스트 파일에 등록되었다면 따로 시작시키지 않아도 됨
-애플리케이션은 컨텍스트 클래스의 registerReceiver()메소드를 이용하면 런타임 시에도 수신자를 등록할 수있음
-서비스처럼 브로드캐스트 수신자도 UI가 없음
-브로드캐스트를 이용해서 처리하면 백그라운드(background)로 동작하므로 사용자가 모름
*구분
-일반 브로드캐스트(sendBroadcast() 메소드로 호출)
->비동저기적으로 실행되며 모든 수신자는 순서 없이 실행됨(때로는 동시에 실행됨)
-순차 브로드캐스트(sendOrderedBroadcast() 메소드로 호출)
->한 번에 하나의 수신자에만 전달되므로 순서대로 실행됨.
중간에 취소하면 그 다음 수신자는 받지 못함.
수신자가 실행되는 순서는 인텐트필터의 속성으로 정할 수 있음(순서가 같으면 임의로 실행됨)
*배터리 상태를 표시해주는 앱
-배터리 상태 이미지를 복해서 추가
*콘텐트 프로바이더(Content provider)
-안드로이드는 보안상 앱에서 사용하는 데이터를 외부에서 접근할 수가 없음
-파일이나 데이터베이스를 외부 앱에서 사용하도록 하려면 콘텐트 프로바이더
(content provider : 줄여서 CP)를 만들어서 외부로 제공 -> 앱 간 데이터 공유
*URI(Uniform Resource identifier)
-URI는 콘텐트 프로바이더에서 제공하는 데이터에 접근하기 위한 주소
-URI는 "content://패키지명/경로/아이디" 형식으로 지정
* 안드로이드 제공 콘텐트 프로바이더
-안드로이드 자체적으로 제공하는 것