Intent

intent

컴포넌트간의 호출과 데이터 전달에 이용.

메소드
startActivity() -새로운 액티비티를 화면에 띄울 때
startService(), bindService() 서비스와 관련
broadcastIntent() 브로드캐스팅을 수행할 때

명시적 인텐트
호출할 대상을 정확히 지정해주는 경우.

Intent intent = new Intent (MainActivity.this, SubActivity.class);
startActivity(intent);

암시적 인텐트
액션과 데이터를 지정했으나 호출할 대상이 변경될 수 있는 경우

startActivity(), startActivityForResult()
둘다 모두 액티비티를 띄우기 위한 메소드이다.
차이점은 startActivity(Intent intent)의 경우에는 단순히 대상의 액티비티만을 띄우기 위한 용도로 사용된다.

startActivityForResult(Intent intent, int requestCode)의 경우에는 액티비티를 띄운 대상에게 데이터를 전달 하거나 다시 돌아올 때 데이터를 받기 위한 수단으로 사용한다. 이 메서드를 사용하고 나서 onActivityResult(int requestCode, int resultCode, Intent data); 메서드를 사용하면 전달받은 데이터를 사용할 수 있다.

requestCode: startActivityForResult()에서 전해준 requestCode이다. intent가 여러개 있을 경우 이 코드로 어떤 화면에서 전달 받은 것인지 판별 할 수 있다.

resultCode: 다시 원래 화면으로 돌아올 때 전 액티비티에서 결과로 전해준 코드값이다.

data : 다시 원래 화면으로 돌아올 때 전 액티비티에서 결과로 전해준 데이터가들어 있다.

액티비티에서 인텐트전달받는 경우는 두가지가 있는데

getIntent() : 액티비티가 새로 만들어지는 경우에는 부모액티비티에서 전달받은 intent()를 사용할 수 있다. -> onCreate()메소드가 실행되면서
onNewIntent(): 액티비티가 재사용되는 경우에는 onCreate()메소드가 실행되지 않는다. 그러므로 onNewIntent()메소드를 사용해야 한다.


부가데이터 전달

intent를 사용하여 putExtra()라는 메소드와 get***Extra() 메소드를 이용하면 다른 액티비티에 데이터의 전달과 수신이 가능하다. (***는 기본 자료형의 이름)그리고 전달받은 액티비티에서 데이터를 사용하기 위해서는 우선 가장 기본적인 serializable객체를 이용하는 것이다.
하지만 serializable은 자료형의 타입과 데이터를 모두 가져오므로 용량을 많이 차지한다. 그래서 안드로이드에서는 Pacelable이라는 데이터만을 가져오는 인터페이스를 구현해서 사용하는 것을 권장한다.


serializable
Pacelable이라는 인터페이스는
int describeContents()void writeToPacel(Pacel dest, int flags)라는 메서드를 재정의 해줘야 한다.
마지막으로 CREATOR라는 상수를 정의 해주면 된다.
describeContents() :
 객체가 가지고 있는 데이터를 Parcel객체로 만들어주는 역할을 한다.

 














http://arabiannight.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9CAndroid-%EC%9D%B8%ED%85%90%ED%8A%B8%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EB%B3%B4%EC%9E%90-intent-filter

댓글

이 블로그의 인기 게시물

TextView, EditText

간단한 계산기 만들기(EditText, TextView, Button)

setVisible속성