액티비티와 인텐트
허준영(jyheo@hansung.ac.kr)
Contents
- 액티비티(Activity)
- 액티비티 라이프사이클
- 인텐트(Intent)
- 명시적 인텐트
- 암시적 인텐트
- 인텐트로 데이터 전달하기
액티비티(Activity)
Activity 는 일종의 애플리케이션 구성 요소로서, 사용자와 상호작용할 수 있는 화면 을 제공하여 전화 걸기, 사진 찍기, 이메일 보내기 또는 지도 보기 등의 일을 할 수 있습니다. 액티비티마다 창이 하나씩 주어져 이곳에 사용자 인터페이스를 끌어올(draw) 수 있습니다. 이 창은 일반적으로 화면을 가득 채우지만, 작은 창으로 만들어 다른 창 위에 띄울 수도 있습니다.
여기에서 창은 View
출처: https://developer.android.com/guide/components/activities.html
액티비티(Activity) 사용(1/2)
- setContentView()를 이용하여 액티비티의 View를 draw
public class FirstActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_first); }
- Android Manifest 파일에 Activity를 등록
<manifest> <application> <activity android:name=".FirstActivity" android:label="First Activity"> </activity> </application> </manifest>
액티비티(Activity) 사용 (2/2)
- 라이프 사이클 콜백 처리
- onCreate, onStart, onResume, onPause, onStop, onDestroy()
- 설정 변경(세로/가로 보기 전환 등)에 따른 콜백 처리
- onConfigurationChanged
- 액티비티 시작시에 정보를 전달하거나 액티비티가 종료될 때 결과를 리턴할 수 있음
액티비티 라이프 사이클
출처: https://developer.android.com/guide/components/activities.html
액티비티 전환 시 라이프 사이클 콜백
- FirstActivity에서 SecondActivity 시작
- FirstActivity의 onPause()
- SecondActivity의 onCreate(),
- onStart(), onResume()
- FirstActivity의 onStop()
- 단말기의 뒤로가기 버튼 누름
- SecondActivity의 onPause()
- FirstActivity의 onRestart(), onStart(), onResume()
- SecondActivity의 onStop(), onDestroy()
인텐트
Intent는 일종의 메시지 객체입니다. 이것을 사용해 다른 앱 구성 요소로부터 작업을 요청할 수 있습니다. 인텐트가 여러 구성 요소 사이의 통신을 용이하게 하는 데에는 몇 가지 방법이 있지만, 기본적인 사용 사례는 다음과 같은 세 가지입니다.
- 액티비티 시작하기
- 서비스 시작하기
- 브로드캐스트 전달하기
출처: https://developer.android.com/guide/components/intents-filters.html
인텐트로 액티비티 시작하기
- 시작하려는 액티비티(SecondActivity.class)를 지정하고 Intent 생성
Intent intent = new Intent(getApplicationContext(), SecondActivity.class); startActivity(intent);
명시적 인텐트 : 인텐트를 받을 대상이 명확히 정해져 있음
인텐트 유형
- 명시적(explicit) 인텐트 – 시작할 구성 요소의 이름을 지정
- 암시적(implicit) 인텐트 – 이름을 지정하지 않고 일반적인 작업(전화걸기, 지도보기 등)을 지정
암시적(Implicit) 인텐트 사용
- 필요한 Action을 지정하고 Intent를 생성
Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:114")); startActivity(intent);
소스: https://github.com/jyheo/android-java-examples/tree/master/ActivityIntent
암시적 인텐트 받기(인텐트 필터)
-
manifest.xml에 인텐트 필터를 추가
<activity android:name=".SecondActivity"> <intent-filter> <action android:name="android.intent.action.DIAL" /> <category android:name="android.intent.category.DEFAULT" /> <data android:scheme="tel" /> </intent-filter> </activity>
소스: https://github.com/jyheo/android-java-examples/tree/master/ActivityIntent
인텐트에 정보 태워 전달하고 받기
- FirstActivity에서 ThirdActivity로 인텐트를 보내고 결과 인텐트를 기다려서 받기
// 인텐트를 ThirdActivity로 보내기 Intent intent =new Intent(getApplicationContext(), ThirdActivity.class); intent.putExtra("UserDefinedExtra", "Hello"); startActivityForResult(intent, request_code);
- ThirdActivity 에서 FirstActivity가 보낸 인텐트 받기
// FirstActivity가 보낸 인텐트를 받기 protected void onCreate(Bundle sState) { ... 생략 ... Intent intent = getIntent(); intent.getStringExtra("UserDefinedExtra"); }
- ThirdActivity 에서 결과 인텐트 되돌려 주기
// 결과 인텐트 되돌려 주기 Intent resultIntent = new Intent(); resultIntent.putExtra("ResultString","World"); setResult(RESULT_OK, resultIntent);
- FirstActivity에서 결과 인텐트 받기
// 결과 인텐트를 받기 protected void onActivityResult(int request, int result, Intent data) { ... 생략 ... data.getStringExtra("ResultString"); }
소스: https://github.com/jyheo/android-java-examples/tree/master/ActivityIntent