package kr.co.activitylifecycle;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().setIcon(R.drawable.ic_launcher);
setTitle("액티비티 라이프사이클");
Log.i("액티비티 생명주기", " onCreate()");
Button btnDial = findViewById(R.id.btnDial);
btnDial.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Uri uri = Uri.parse("tel:02-532-6509");
Intent intent = new Intent(Intent.ACTION_DIAL, uri);
startActivity(intent);
}
});
Button btnFinish = findViewById(R.id.btnFinish);
btnFinish.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
finish();
}
});
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("액티비티 생명주기", " onDestroy()");
}
@Override
protected void onPause() {
super.onPause();
Log.i("액티비티 생명주기", " onPause()");
}
@Override
protected void onRestart() {
super.onRestart();
Log.i("액티비티 생명주기", " onRestart()");
}
@Override
protected void onResume() {
super.onResume();
Log.i("액티비티 생명주기", " onResume()");
}
@Override
protected void onStart() {
super.onStart();
Log.i("액티비티 생명주기", " onStart()");
}
@Override
protected void onStop() {
super.onStop();
Log.i("액티비티 생명주기", " onStop()");
}
}
1. 안드로이드 4대 컴포넌트
- 1)액티비티(Activity) : 화면을 구성하는 가장 기본적인 컴포넌트
- 2)서비스(Service) : 엑티비티와 상관없이 백그라운드에서 동작하는 컴포넌트
- 3)브로드캐스트 리시버(Broadcast Receiver) : 문자 메시지 도착, 배터리 방전, SD 카드 탈부착, 네트워크 환경 변화 발생 시 전체 응용프로그램이 들을 수 있도록 방송 신호 보냄.
- 4)콘탠트 프로바이더(Content Provider) : 응용프로그램 사이에 데이터를 상호 공유하기 위한 컴포넌트
2. 4가지 개념
- 1)애플리케이션(application)
-한 개 이상의 액티비티들로 구성됨.
-메인 엑티비티(MainActivity)는 자동으로 등록됨
-추가한 세컨트 액티비티는 별도 등록 필요.
-액티비티들은 애플리케이션 안에서 느슨하게 묶여있음.
- 액티비티(activity)
-애플리케이션을 구성하는 빌딩 블록
- 태스크(Task)
-스택에 있는 액티비티들
-하나의 태스크는 스택에 있는 액티비티들로 구성됨.
- 액티비티 스택(activity stack)
-Back 키를 누르면 현재 액티비티를 제거하고 이전 액티비티로 되돌아감.
-사용자가 방문한 액티비티들은 어딘가에 기억
3. 액티비티 개요
-일반적으로 액티비티 하나당 XML 파일 하나를 만들어서 사용함.
-MainActivity.java 코드는 Activity 클래스를 상속받음.
4. 인탠트(Intent)
- 1)각각의 화면은 별도의 액티비티로 구현됨.
- 2)하나의 액티비티(화면)에서 다른 액티비티(화면)로 전환하려면 어떻게 하여야 하는가?
- 3)다른 액티비티를 시작하려면 액티비티의 실행에 필요한 여러 가지 정보들을 보내주어야함. (정보를 인탠트에 실어보냄.)
- 4)안드로이드 4대 컴포넌트가 상호 간에 데이터를 주고받기 위한 메시지 객체
- 5)인탠트 종류
-명시적 인탠트(explicit intent) : "애플리케이션 A의 컴포넌트 B를 구동시켜라"와 같이 명확하게 지정
-암시적 인탠트(implicit intent) : "지도를 보여줄 수 있는 컴포넌트이면 어떤 것이라도 좋다."
5. 명시적 인탠트
- 1)다른 액티비티의 이름을 명확히 지정할 때 사용하는 방법
- 2)명시적 인탠트와 데이터의 전달
-메인 액티비티에서 인탠트에 데이터를 실어 넘긴 후, 세컨드 액티비티에서 받은 데이터 처리하는 방식(한쪽 방향)
-양방향 액티비티와 데이터 전달
-서브 액티비티 시작 : startActivityForResult()
-액티비티에서 결과 받기 : onActivityResult()
-값을 저장하고 값을 읽는 메서드
-putExtra()
-getIntExtra()
-getStringExtra()..
6. 암시적 인탠트
- 1)어떤 작업을 하기를 원하지만 그 작업을 담당하는 컴포넌트의 이름을 명확하게 모르는 경우 사용
- 2)인탠트 형식(액션)
-ACTION_VIEW : 데이터를 사용자에게 표시한다.
-ACTION_CALL : 전화 통화를 시작한다.
-ACTION_DIAL : 전화 번호를 누르는 화면을 표시한다.
- 3)암시적 인탠트 EX)
- ACTION_VIEW
- content://contacts/people/1 - 1번 연락처 정보를 표시한다.
- ACTION_DIAL
- content://contacts/people/1 - 1번 연락처로 전화걸기 화면을 표시한다.
- 4) 약속된 액션(Action)을 지정하여 안드로이드에서 제공하는 기존 응용 프로그램을 실행하는 것
7. 액티비티 생명주기
- 1) 생성부터 소멸까지의 주기.
- 2) 앱은 화면이 작아 동시에 여러 개의 액티비티(화면)가 나올수 없음.
- 앞에 나오는 화면 하나만 활성화된 상태이고 나머지는 모두 비활성화된 상태로 남게 됨. - 3) 실행 상태 (resumed, running)
- 액티비티가 전경에 위치하고 있으며 사용자의 포커스를 가지고 있음. - 4) 일시 멈춤 상태 (paused) : 다른 액티비티가 전경에 있으며 포커스를 가지고 있으며
현재 액티비티의 일부가 아직도 화면에 보이고 있는 상태 - 5)정지 상태 (stopped)
- 6)콜백 메서드
- onCreate()
- 액티비티가 생성되면서 호출, 중요한 구성요소들 초기화
- onPause()
- 사용자가 액티비티를 떠나고 있을 때, 이 메소드가 호출
- 그 동안 이루어졌던 변경사항을 저장
'📒 education archive > 📱Android' 카테고리의 다른 글
[국비학원 기록/Android] 어댑터뷰 종류, 영화 포스터 app 만들기 (1) | 2022.02.15 |
---|---|
[국비학원 기록/Android] 간단한 일기장 만들기, 파일 입출력 사용 (0) | 2022.02.10 |
[국비학원 기록/Android] 날짜, 시간 예약 app 만들기 (라디오버튼, DatePicker, TimePicker 사용) (0) | 2022.02.08 |
[국비학원 기록/Android] ViewFlipper , 화면 전환, 사진 넘기기 예제 (1) | 2022.02.08 |
[국비학원 기록/Android] 애완동물 사진 선택 만들기 :: 체크박스&라디오박스 (0) | 2022.02.08 |