ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 서비스로 명령 전달
    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
Designed by Tistory.