[안드로이드] Intent, PendingIntent ?
Intent?
인텐트는 서로 다른 컴포넌트사이에서 통신할 수 있는 메시지 객체이다.
대표적으로 3가지 방식을 사용한다.
액티비티 - 어플리케이션의 한 화면을 나타내는 액티비티가 다른 액티비티로 전환할 때
서비스 - 백그라운드에서 기능을 수행하는 컴포넌트
브로드 캐스트 - 다른 액티비티 혹은 시스템에서 받을수있는 메세지
인텐트는 2가지 유형으로 나뉘어진다.
명시적 인텐트(Explicit Intent)
시작하고자하는 컴포넌트의 이름을 명시. 명시적 인텐트는 일반적으로 어플리케이션에서 다른 컴포넌트를 실행할 때 주로 사용되어진다.Intent i = new Intent(FirstActivity.this, SecondActivity.class);
startActivity(i);
인텐트 생성자의 첫 인자에 현재 액티비티, 두번째는 불러올 액티비티를 명시하여 호출한다.
암시적 인텐트(Implicit Intent)
명시적 인텐트 처럼 구체적으로 컴포넌트의 이름을 명시 하지 않고 대신 인텐트를 통해 하고자하는 action을 입력한다. 암시적 인텐트를 사용할 때는 manifest안에 호출할 컴포넌트(액티비티)의 인텐트필터를 선언하여야만 한다.Intent intent = new intent(Intent.ACTION_DIAL);
startActivity(intent);
해당action의 인텐트필터가 선언된 컴포넌트를 실행시킨다.
인텐트는 컴포넌트를 직접 실행시키는 것이 아니라 실행시킬 컴포넌트의 정보를 담고있는 메시지일 뿐이다. 시스템의 PackageManager, ActivityManager 통해 인텐트정보를 이용하여 컴포넌트에게 전달되어진다.
PendingIntent?
생성한 인텐트를 자신이 아닌 다른 컴포넌트에게 특정시간에 대신 작업하게 하도록 요청시에 사용되어진다.
만약 Notification기능을 사용할 때 한 어플리케이션에서 작성되 인텐트를 PendingIntent을 사용하여 해당 어플리케이션이 아닌 NotificationManager가 특정시간에 인텐트를 발생시키도록한다.
PendingIntent의 메소드 getActivity, getBroadcast, getService 가 반환하는 객체를 받아 컴포넌트유형을 지정해준다.
PendingIntent pi = PendingIntent.getActivity(Context, int, intent, int);
마지막인자는 flag를 의미한다 flag는 4가지가 존재한다.
FLAG_CANCEL_CURRENT : 이전에 생성한 PendingIntent는 취소하고 새롭게 만든다.FLAG_NO_CREATE : 이미 생성된 PendingIntent가 없다면 null을 return 한다. 생성된 것이 있다면 그 PendingIntent를 반환한다., 즉 재사용.
FLAG_ONE_SHOT : 이 flag로 생성한 PendingIntent는 일회성이다.
FLAG_UPDATE_CURRENT : 이미 생성된 PendingIntent가 존재하면 해당 Inttent의 내용을 바꾼다.
FLAG_IMMUTABLE : 생성된 PendingIntent는 수정 불가능 하도록 한다.
댓글
댓글 쓰기