[TIL]Android Core Component:2

mandoofu·2024년 9월 13일

안드로이드

목록 보기
8/20
post-thumbnail

Background Task

  • Thread : 개발자가 직접 Thread Handling
  • AsyncTask(Deprecated)
  • Handler & Looper
  • DownloadManager : 다운로드 후 추가작업 가능(intent 처리등)
  • Android Service Component
    • 일정한 간격으로 백그라운드에서 실행 되는 프로세스
    • 화면에 보여지지 않으므로 필요 시 Activity와 데이터를 교환하여 처리
    • Foreground Service 전용 용도로 많이 사용
    • AndroidManifest.xml의 service 요소에 반드시 등록
//안드로이드에게 서비스를 인식하려면 등록 하여야 함. 
 <service  android:enabled="true”  android:name=“com.pyo.service.MusicService”>
       <intent-filter>
            // 위 서비스 클래스의 별칭(action name)
             <action  android:name=“com.pyo.intent.action.MusicAction" />
       </intent-filter>
 </service>
  • Service Component Life Cycle

    • Local or Remote
      • startService()/startForegroundService(): Local에서 시작
      • bindService : Remote 시작
    • startService()/startForegroundService 호출 시
      • 로컬상에서 onCreate()를 호출하고 바로 onStartCommand()를 호출
      • Service가 실행 중이면 onCreate()는 동작안하고 onStartCommand()호출
    • bindService() 호출(IPC) : 서비스가 다른 프로세스에 묶여 있을 경우(원격 호출)
      • onCreate() 호출 후 onBind()를 호출 하며 onStartCommand()는 호출 하지 않음.
    • stopService() 호출 :
      • 로컬상에서는 바로 onDestroy()가 실행
      • Remote(IPC)에서는 연결되어 있는 클라이언트가 없다면 onDestroy()가 실행
      • onDestroy()는 서비스 객체 자신의 stopSelf()가 호출되어도 동작 함.
      • 서비스 생명주기에서 딱 한번만 호출 됨
  • Service 호출 순서

  • WorkManager 주요 클래스

    • WorkManager
      • Queue에 Background Task를 넣고 관리하는 역할
      • API 자체 구현이 Singleton
    • Worker(백그라운드 처리 클래스) : 작업의 단위
      • doWork() : abstract method
        • Background Task Code 의 시작을 여기에 구현해야 함
        • enum class Result(SUCCESS, FAILURE, RETRY)를 반드시 리턴 해야 하며 작업의 계속 진행 유무(재시도 포함)를 결정해야 함
    • WorkRequest
      • Background Task Worker의 Task 반복 유무,실행 조건, 제약에 대한 정보를 설정
      • 반복 유무
      • OneTimeWorkRequest : 한번만 실행
    • WorkState : 상태 모니터링 가능
      • WorkRequest id & WorkRequest의 현재 State를 갖고 있는 객체
      • WorkRequest id로 요청한 Background Task 의 상태정보를 알아낼 수 있음
      • States
        • ENQUEUED, RUNNING, SUCCEEDED, FAILED, BLOCKED, CANCLLED
  • BroadcastReceiver

    • 단말기에서 발생하는 모든 이벤트를 앱에서 받아낼려고 할때 사용
    • Intent에 Bundle을 담아 sendBroadcast(Intent)
    • Manifest 파일에 코드나 receiver 요소로 등록
    • 일반 브로드캐스트 메소드 호출
      • sendBroadcast() 호출하면 일반 Broadcast
      • 비동기적으로 실행 되며 모든 수신자는 순서없이 실행
    • 순차 브로드캐스트
      • sendOrderedBroadcast()를 호출
  • ContentProvider

    • 앱들에 공유될 데이터를 CRUD 할 수 있는 데이터 제공 component
    • 특정 앱들에 데이터를 제공하는 중앙저장소(REST)역할을 담당
    • content://로 시작하는 Scheme를 사용
  • Intent

    • Intent는 사용자가 원하는 실제 행동을 의미
    • Intent Action의 종류는 Activity, BroadcastReceiver, Service 존재
  • Intent의 구성요소

    • Action : intent 클래스에 미리 선언된 인텐트의 행동
    • Data & Type : Action이 수행 될 때 필요한 Url, MIME Type등
    • Extras : 인텐트를 처리 할 대상이 되는 Component가 처리할 Key-Value 집합, Bundle(어느 객체의 부수적 정보)값은 복사하여 호출 한 인텐트로 넘어 감
    • Flag : 액티비티를 실행한 방법 또는 액티비티를 스택에서 관리 하는 방법
  • IntentFilter

    • 재사용 가능한 컴포넌트의 명세를 작성하는 곳
    • Intent Filter를 통해 Intent의 등록이 이뤄지며 이 사항은 Manifest.xml에 Intent-filter를 통해 등록된다.
    • 다른 앱에도 제공 시 android:exported="true" 선언
  • Intent Resolution : Intent Filter 구조를 파악하여 코드에서 호출 시 적절한 인텐트를 찾아 자동으로 싷행시켜주는 기능

0개의 댓글