[국비학원 기록/Android] 안드로이드 4대 컴포넌트, 명시적 인탠트, 암시적 인탠트, 액티비티 생명주기
my code archive
article thumbnail
반응형
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()
      - 사용자가 액티비티를 떠나고 있을 때, 이 메소드가 호출
      - 그 동안 이루어졌던 변경사항을 저장

 

반응형
profile

my code archive

@얼레벌레 개발자👩‍💻

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

반응형