꿈꾸는 시스템 디자이너

action을 가지는 Intent를 이용하여 Activity나 Service를 실행(호출)할 시 주의점 본문

Development/Android

action을 가지는 Intent를 이용하여 Activity나 Service를 실행(호출)할 시 주의점

독행소년 2013. 10. 14. 15:48

Activity에서 Intent를 이용하여 새로운 Activity나 Service를 실행하면 피호출되는 Activity나 Service의 onCreate()나 onStartCommand()에서 수신되는 Intent의 action값에 따라 적절한 처리를 하게 된다.


이 때 아주 바보 같은 실수를 저지를 수 있음에 주의를 요한다. ㅡ,ㅡ


<Service 파일>

	public int onStartCommand(Intent intent, int flags, int startId) {
		if(isAlive == false)
			startPamService();
		
		String action = intent.getAction();
		
		if(action == null)
			return super.onStartCommand(intent, flags, startId);
		
		if(action.equals(Utilities.SEND_INSCONS)){
			sendInsCons = new SendInsCons(this.getBaseContext(),wpManager,channel);
			sendInsCons.execute((Void) null);
		}else if(action.equals(Utilities.STOP_SEND_INSCONS)){
			sendInsCons.cancel(false);
		}
		
		return super.onStartCommand(intent, flags, startId);
	}

서비스를 구현할 경우 onStartCommand()를 구현할 때 수신한 action값에 따라 적절한 로직을 수행하도록 하는데, 만약 이 서비스를 호출하는 activity에서 action을 가지지 않는 Intent를 이용하여 이 서비스를 호출할 경우 line 5,7,8과 같이 null 처리를 해주는 로직을 추가해야 한다. 그렇지 않으면 line 10에서부터 시작하는 코드에서 null을 특정 action값과 비교할 때 에러가 발생한다.



Comments