[컴][안드로이드] Pending intent vs intent

PendingIntent vs Intent

Pending intent

Usage

pending intent 는 말 그대로 지연된(pending) intent 이다. 그럼 이것을 언제 사용하느냐, 그것에 대한 이야기는 ref. 1 에 잘 나와 있다. 여기서 그 내용을 일부 이야기 하자면,
일단 Pending Intent 는 App Widget 에서 쓰인다.[ref. 1] 물론 다른 곳에서도 쓰인다.

참고로, ref. 1 에서 Service 에 대한 PendingIntent 예제를 확인할 수 있다.

Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

RemoteViews views = new RemoteViews(context.getPackageName(),R.layout.e2p_appwidget);
views.setOnClickPendingIntent(R.id.update, pendingIntent);

widget 같은 경우 만들어 놓으면 우리가 app 을 실행할 때 실행하는 것이 아니기 때문에 자신이 만들어 놓은 app 이 동작할 때 control 할 수 있는게 아니다. widget 은 system 의 통제를 받게 된다.[ref. 1]  그래서 click listener 를 assign 할 수 없는데, 그래서 PendingIntent 를 assign 한다고 한다.[ref. 1]

그러면, user 가 widget 을 touch 했을 때 이 PendingIntent 가 실행된다. 이렇게 나중에 실행되기 때문에 peding 이라 불린다고 하는 듯 하다.(출처 불명)



Permission

ref. 2 에 보면 permission 에 대한 설명이 나온다. Intent 의 경우는 Intent 를 받아서 수행하는 app 의 permission 을 이용하게 되지만, PendingIntent 의 경우는 intent 를 보내는 app 의 permission 을 가지고 Intent 를 받는 app 에서 Intent 를 실행하게 된다고 한다.

이것은 widget 에서는 명확하다. 우리가 widget 을 만들 때 app 의 permission 을 갖기 때문에 widget 도 같은 permission 을 갖게 된다. 하지만 위에서 얘기처럼 widget 이 system 의 control 안으로 들어가면 permission 이 달라지게 되는데, 이 상황에서도 같은 permission 을 유지하기 위해서 PendingIntent 에 permission 을 같이 전달하는 듯 하다.



Reference

  1. http://stackoverflow.com/questions/9152924/android-start-service-with-context-startservice-vs-pendingintent-getservice
  2. http://stackoverflow.com/questions/2808796/what-is-pending-intent
  3. How to use PendingIntent

댓글 없음:

댓글 쓰기