[edwith] 안드로이드 앱 개발 중급 (1)

2019. 6. 22. 20:45Engineer/안드로이드 앱 프로그래밍

반응형

부스트코스에서 무료로 시청 가능한 안드로이드 앱 개발 중급 과정이다. 초급에 비해 강의 영상이 그렇게 많지 않아 보인다. 어떤 내용이 있나 공부해보려고 한다. 몇 년 내용이라서 지금의 안드로이드 버전과는 다를 수 있지 않을까 싶으니 그 점을 염두해 두고 보면 될 것 같다. 


강의 내용은 모두 

https://www.edwith.org/android_adv/joinLectures/6090

에서 가져온 것입니다. 



 Lecture 1 



   Chapter 2. 중급 필수 기능 1


작업을 스케줄링하는 방법

  • TimerTask
  • AlarmManager
  • JobScheduler
TimerTask의 경우 안드로이드 시스템이 자원을 해지하는 과정에서 TimerTask를 사용한 액티비티나 서비스를 종료시킬 수 있기 때문에 비권장
AlarmManger는 디바이스의 현재 상태를 인식하지 못하기 때문에 원하는 시간에 실행할 수 있지만 네트워크가 무료 와이파이인지 충전중인지를 알지 못해 적절하지 못한 시점에서 작업이 실행 될 여지가 있으므로 비권장

JobScheduler는 위의 두 방법의 단점이 해결된 방식





JobScheduler의 가장 큰 장점은 디바이스의 상태를 확인할 수 있다는 것이다. 



JobService 주의점

  1. JobService는 메인스레드에서 동작하므로 반드시 직접 종료해야 한다. 작업이 동작하는 동안 앱을 실행하면 ANR(Android not responding) 에러가 발생할 수 있다. 

  2. 작업이 모두 끝나면 onStartJob(JobParameters params)의 JobParameters를 인자로 지정한 jobFinishd(JobParameters, boolean needsReschedule)메소드를 호출해서 작업을 끝내야 한다. 그렇지 않으면 앱은 실행된 상태로 유지가 될 것이고 베터리를 계속 소모할 것이다. 

  3. 서비스를 AndroidManifest.xml에 등록해야 한다. 그리고 android.permission.BIND_JOB_SERVICE 퍼미션을 지정해서 서비스가 시스템에 의해 자동으로 종료되지 않게 해야한다. 



onPostExcute에서 UI 설정(update)가 가능하다 메인 쓰레드에서 동작하므로. 


백그라운드에서 해야할 작업들이 그렇게 많지 않을 경우 AsyncTask 를 쓰면 되지만, 복잡해서 이걸로 감당이 안될 경우 별도의 Thread를 만들어서 코딩해야한다.  그리고 AsyncTask의 고질적인 문제 중 하나가, AsyncTask가 여러개일 경우 병행으로 실행이 잘 안된다고 한다. 또는 속도가 느리거나. 개인 개발자나 작은 업체에서 만드는 경우에는 크게 문제 되지 않는다.   


   Chapter 3. 중급 필수 기능 2


브로드캐스트 리시버를 사용하면 안드로이드에서 발생하는 여러 브로캐스트 즉, 이벤트를 감지할 수 있다. 예를 들어 문자가 왔을때, 부팅이 완료되었을때, 날짜가 변경되었을 때 등을 알 수 있다. 




위의 브로드캐스트 리시버 등록 방법 중 방법1은 앱을 설치했을때 Menifest를 통해 안드로이드에 등록이 되서 필요한 이벤트가 발생했을 때 앱이 알 수 있다. 하지만 방법2는 앱이 실행이 되어야 자바코드를 통하여 브로드캐스트 리시버가 등록되고 앱이 실행중에만 브로드캐스트 리시버를 통한 이벤트 호출이 발생한다. 


이번 영상에서는 배터리 상태가 바뀔때마다 베터리 정보를 업데이트하는 앱과, 부팅시 애플리케이션이 자동 실행되게 하는 방법에 대한 내용을 다룬다. 




아래는 앱이 동작중에 SMS를 수신시에 어떤 작업을 하도록 하는 것이다.  





일반적으로 스레드가 많이 쓰이는 경우는 화면 UI를 많이 만드는데, 이 때 백그라운드에서 작업을 하고 싶다면 쓸수 있는 방법은 스레드 밖에 없다. 그런데 스레드는  사용하는 방법이 복잡하고 잘못하면 문제가 많이 생기다보니 구글쪽에서 AsyncTask를 만들어서 제공하고 있는데, 다만 이것은 asyncTask를 여러개 동작 시키는 환경에서는 느려질 수 있다. 







위의 표에 있는 메소드 이외에도 더 있으나 주요하게 쓰이는 것은 위와 같음. do나 on으로 시작하는 걸 알고 있으면 나중에 쓰기 편함. 


위에서 4번째에 오타...onPreExcute( )에 전될되는 것이 아니라, onPostExcute에 전달됨.

작업이 취소되었을때 동작할 내용들은 onCancelled( )메소드에 작성하면된다. 




반응형