앞서 설명한 Local Service 를 구현하는 방법중에 하나인 startService를 통해 구현하는 방법에 대해 설명하겠다. 특징 1. 특정 서비스를 백그라운드로 동작시키는 것에 목적을 둔 형태. 2. 발생시킨 곳에서는 중단시키는 것 이외에는 어떤 제어도 불가능하다. 3. 발생시키는 곳과 서비스는 독립적이여서 Activity가 종료되어도 동작한다. Start Service의 생명주기 Start/Bound 인지에 따라서 생명주기에 차이가 있다. Service가 실행되면 onCreate - onStartCommand 생명주기 함수가 호출되고, 종료될 땐 onDestroy 생명주기 함수가 호출된다. 결국 서비스가 동작중일땐 onStartCommand의 코드가 계속해서 동작하는 것이다. 구현 1. Serv..
Service ? Service는 "특정 누군가에게 특정 기능을 제공하는 컴포넌트" 이다. Service는 안드로이드의 4대 Component중 하나로, 가장 중요하고 가장 어렵다고 한다. 화면을 가지지 않고 백그라운드에서 실행되며, 다른 컴포넌트에 의존하지 않고 독립적인 동작을 수행한다. 각종 컴포넌트에서 서비스를 제어하거나 원하는 정보를 참조할 수도 있다. Thread는 액티비티가 종료되면 객체가 소멸/초기화 됨에 따라서 이를 제어할 수 없다는 차이점이 있다. Thread 자체가 종료되는 것이 아니다. Main Thread가 종료되지 않기 때문에 자식 Thread도 여전히 살아있다. 하지만 이 자식 Thread를 컨트롤 할 수 없다. 심지어는 종료시킬 수도 없다. 혼자 막 구동되고 있는 상태. 따라서..
앱은 Main Thread와 Work Thread의 협력으로 원활하게 동작할 수 있지만, 복잡성과 스레드마다 역할을 엄격히 구분해야 하는 문제점이 있다. 안드로이드에선 개발시간 단축 및 복잡성을 줄이기 위해 다양한 Thread Helper 가 존재하는데 이번 포스팅에서는 AsyncTask 클래스에 대해서 소개한다. 하지만 AsyncTask에는 여러 문제점이 존재했고 2019년 11월 8일 6시에 공식적으로 Deprecated 되었다. AsyncTask는 전체적인 프로세스를 단순화하지만 안드로이드의 생명주기를 전혀 신경쓰지 않는다. 그렇게 때문에 액티비티나 프레그먼트가 재생성되거나 파괴었을 때 마무리 작업에 대한 내용이 보호되지 않는다. 예를 들면, 네트워크 요청과 같은 오래걸리는 작업을 Backgroun..
Sub Thread에서 UI수정이 필요할 경우에 Sub Thread에서 직접 수정할 수 없다. 왜냐하면 여러 Sub Thread가 존재할 때 동시에 접근할 수 있는 동기화문제가 존재하기 때문이다. Q. 그러면 Sub Thread에서 처리하는 내용은 전부 UI와 관련 없는 내용이여야할까?? A. 그건 말도안됨; Message를 생성하는 방법은 Message.obtain~~~ 혹은 mHandler.obtainMessage~~~ 이 있다. 이 두가지의 차이점이 없기 때문에 기억만해두고 편리한걸 이용하면 될 듯하다. 그래서 Sub Thread에서 UI 수정이 필요할 경우 Main Thread에 Request를 보내서 처리하게 된다. 이 때 Sub Thread는 Handler와 Message를 사용해서 Reque..
뭐 Thread가 무엇인지 Process와 Thread에 대한개념적인 내용은 건너뛰고 안드로이드에서 Thread를 사용하는 포인트와 사용할 때 자주 사용되는 형태에 대해서만 설명하겠다. Thread의 기본적인 사용법은 JAVA와 동일하다. ( Runnable 까지도 ... ) Thread thread = new Thread() { public void run() { // ... } } thread.start(); Thread t = new Worker(); t.start(); class Worker extends Thread { public void run() { // ... } } new Thread() { public void run() { // ... } }.start(); Thread t = ne..
예제를 진행하면서 어플에 권한을 부여하는 방법에 대해서 진행하겠다. ( SMS를 받았을 때의 Broadcast를 Receive할 수 있는 권한 획득 ) 1. 사용할 권한을 AndroidManifest.xml 에 등록. // 권한을 사용자에게 요청(Request)한다. ← 위와같은 구문을 나열해서 필요한 권한을 모두 등록한다. 2. 권한등록이 별도로 필요한지 확인. ( SDK 23 이상은 필요 ) Android 6.0 (SDK 23) 이후 앱이 설치될 때가 아니라 앱이 실행되는 중에 앱에 권한을 부여하도록 정책이 변경되어서 이와 같은 권한등록이 별도로 필요하다. 3. protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInsta..