-
서비스로 명령 전달Android/AndroidStudio 2018. 6. 20. 16:24
구성요소에서 서비스로 명령전달
startService(intent 객체) 메소드를 통하여 서비스를 실행할 수 있다.
서비스의 경우 onCreate() 및 onDestroy()의 메소드를 재정의 할 수있다.
액티비티에 비해 단순한 생명주기를 가진다.
서비스는 한번 호출되면 비정상적으로 소멸된다하더라도 시스템에 의해 다시 실행 될 수 있다.
따라서 한번 호출되면 onCreate()가 다시 실행되지 않는다.
여러 구성요소에서 인텐트로 서비스에 명령을 전달할 때,
onCreate()에서는 그 명령을 받을 수 없다.
-> 이럴때는 onStartCommand() 메소드를 재정의 한다.
일반적으로 새로운 클래스를 정의할 때 onCreate(), onStartCommand(), onDestory() 메소드를 재정의 하는 경우가 많다.
서비스에서 액티비티로 데이터 전달
서비스는 화면이 없는 구성요소이다.
때문에 화면이 있는 액티비티로 인텐트로 데이터를 전달할경우 문제가 생길 수 있다.
(안드로이드 시스템은 하나의 앱을 task로 관리한다. 서비스의 경우 task가 아니기 때문에 문제가 생길 수 있다.)
intent.addFlag(INTENT.FLAG_ACTIVITY_NEW_TASK | INTENT.FLAG_SINGLE_TOP | INTENT.FLAG_CLEAR_TOP)
일잔벅으로 위의 세가지 FLAG를 많이 사용한다.
Intent showIntent = new Intent(getApplicationContext(), MainActivity.class); showIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP); showIntent.putExtra("command", "show"); showIntent.putExtra("name", "mike"); startActivity(showIntent);
startActivity()를 실행하게 되면 대상이되는 액티비티의 onCreate(), onNewIntet() 메소드가 호출된다.
( 새로 생성되는 경우에는 onCreate(), 이미 생성된 액티비티의 경우 onNewIntet() )
따라서 인텐트를 처리하는 프로세스를 만들어서 onCreate와 onNewIntet에서 모두 처리할 수 있도록 해야한다.
@Override protected void onNewIntent(Intent intent) { processIntent(intent); super.onNewIntent(intent); }
출처. edwith.org / http://www.edwith.org/boostcourse-android/lecture/17068/
'Android > AndroidStudio' 카테고리의 다른 글
안드로이드 thread와 handler (0) 2018.07.07 Android Guideline (0) 2018.07.02 Thread (0) 2018.07.01 Guide to background processing (0) 2018.06.30 Fragment (0) 2018.06.21