암묵적 Intent를 sendBroadcast메서드와 startActivity메서드로 보낼경우의 차이.


sendBroadcast메서드의 경우

sendBroadcast메서드로 보낸 Intent는 취급가능한 모든 수신처(브로드캐스트리시버)에게 보내어진다.

즉, 복수의 오브젝트가 같은 Intent에 반응한다.


startActivity메서드의 경우

startActivity메서드가 기대하고있는 결과는 어떤 Activity가 기동, 최전면에 표시되는것이다.

때문에 Intent는 반드시 1개의 Activity에게 전송된다.

만약, 전송된 Intent를 처리할 수 있는 Activity가 시스템안에 1개도 없을경우 ActivityNotFoundException이 발생.

만약, 전송된 Intent를 처리할 수 있는 Activity가 시스템안에 여러개 존재할 경우, 어떤 Activity에 Intent를 보낼지를 

유저가 선택한다.


startActivity메서드를 실행할 때, 처리할 수 있는 Activity가 시스템안에 1개도 없을경우 ActivityNotFoundException이 발생.

어플리케이션에서 핸들링(try~catch)로 처리할 수도 있지만, 실제로 Intent를 보내기 전에 처리할 수 있는 오브젝트가 시스템안에

존재하는지 체크할 수 있다.

List<ResolveInfo> info = getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);

이 코드로 queryIntentActivities메서드의 리턴값인 List오브젝트에는 인수로 넘긴 Intent를 취급할 수 있는 오브젝트의 정보가 들어있다.

사이즈가 0(빈 리스트)이면 취급할 수 있는 오브젝트가 존재하지 않는것.


출처 - http://blog.daum.net/sastruts/15

Posted by 레미파
,