티스토리 뷰

반응형
액티비티 ?

안드로이드의 4대 Component로 그냥 단순하게 눈에보이는 화면이라고 생각하면된다.
하나의 Application 에서 하나의 Activity만 사용하는 것이 아니다. (화면 전환 가능)
이 때 하나의 액티비티 A에서 액티비티 B로 넘어갈 때 데이터를 전달해주는 역할을 하는 것이 인텐트이다.

 

어떻게 A Activity가 B Package명과 B Activity명만으로 B Activity를 실행시킬 수 있는가?

 - 시스템 서비스인 Package Manager, Activity Manager 를 사용하기 때문에 가능하다.

 

Package Manager : App을 설치, 삭제를 담당한다. 또한 설치된 모든 Package 정보를 수집한다.

                                  (AndroidManifest.xml 파일의 내용을 기반으로 설치시점에 수집된다.)

      - Sdk Version이 맞지 않거나, 이미 설치된 경우 다운로드 하지못하게 관리하는 역할 수행.

 

Activity Manager : 안드로이드의 4대 Component를 관리하며,

                        그중에서 Activity를 실행하는 기능도 담당한다. 

 

  1. A Activity는 Inent를 작성해서 Activity Manager에게 전달하게 된다. (startActivity(intent))
  2. Activity Manager가 하는일은 Intent 정보를 추출해 Package Manager에게 전달한다.
  3. Package Manager은 전달받은 정보를 통해 설치된 Package인지 확인하고, 존재한다면 실행할 Activity 정보를 Activity Manager에게 전달하게 된다.
  4. 제공 받은 Activity 정보를 통해 해당 Activity를 실행하고 Intent도 B Activity에 전달한다.

 

Q. Activity 실행후에 역할이 끝났는데 왜 실행한 Activity에 Intent를 전달해야할까요?

A.
Intent는 실행할 Activity 정보, 실행할 Activity에 전달할 특정 Data를 포함하게 된다.
따라서 Activity를 실행한 후에도 이 Intent를 새로 실행된 Activity에게 반드시 보내야한다.

 

 


인텐트(Intent) ?

컴포넌트(액티비티, 서비스)간의 통신을 위해 주고받는 메세지 또는 데이터 덩어리.

 

인텐트의 생성자 ?

Intent()
Intent(Intent O)
Intent(String action, [, Uri uri])
Intent(Context packageContext, Class<?> cls)
Intent(String action, Uri uri, Context packageContext, Class<?> cls)

 

 


새로운 액티비티 실행하기

startActivity(intent); // 이런식으로 새로운 액티비티를 실행. 
			// 이 때 intent에 어떤 Activity를 실행할지와 데이터를 저장한다.

Intent intent = new Intent(getApplicationContext(), 액티비티명.class);
Intent intent = new Intent();
intent.setComponent(new Component(getApplicationContext(), 액티비티명.class));
intent.setComponent(new ComponentName("com.superdroid.test.activity.b", "com.superdroid.test.activity.b.BActivity"));
Intent intent = new Intent(MainActivity.this, 액티비티명.class);
Intent intent = new Intent(this, 액티비티명.class);

 

위와같이 여러가지 방법으로 intent생성과 실행시킬 Activity 지정을 할수있다.

 ( 위에 방법들은 굉장히 중요한 내용들이므로 꼭 기억하자. )

 

 

생성된 인텐트에 데이터를 집어넣을 때는 아래와 같은 함수들을 사용한다.

intent.putExtra("name", data);

 

반대로 추가실행된 액티비티에서 intent로 전달받은 데이터를 꺼낼때는 아래와 같은 함수들을 사용한다.

Intent intent = new Intent(this.getIntent());
// Intent intent = this.getIntent();

intent.getStringExtra("name"); 

  → 이와같이 데이터를 꺼낼때는 데이터형을 명시해줘야 한다.

 

 


새로 실행시킨 액티비티의 종료값을 돌려받고 싶을 때.

onActivityResult(int requestCode, int resultCode, Intent data){
    switch(requestCode){
        case ACT_EDIT:
            if(resultCode == RESULT_OK)
                 .......
    }
}

 

실행시킨 액티비티쪽에서는 

setResult(RESULT_OK, intent);
finish();


이와같이 해주면 정해준 결과값이 전달된다. 물론 데이터도 전달된다.

 

반응형

'Android > Concept' 카테고리의 다른 글

[Android] Bundle  (0) 2019.07.29
[Android] 명시적 인텐트 & 암시적 인텐트  (0) 2019.07.29
[Android] 이벤트 별쾅쾅.  (0) 2019.07.19
[Android] View Attribute.  (0) 2019.07.16
[Android] Table Layout + Table Row  (0) 2019.07.16
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함