티스토리 뷰

다중 액티비티, 앱 화면 전환 시 초기 설정

다중 액티비티

  • 화면에 띄울 java 파일을 각각 만들어서(1페이지, 2페이지와 같이) 화면 전환 시 다른 java 파일을 화면에 나타냄

 

AndroidManifest.xml

  • 다중 액티비티 사용 시 주의: 매니페스트 파일 내에 모든 액티비티들에 대한 정보 등록 필요
  • <activity android:name=".Activity_first"/>: 불러올 파일
  • <activity android:name=".MainActivity" android:exported="true"> … (중략) … </activity>: 초기 화면 파일 
  • <uses-permission android:name="android.permission.INTERNET" />: 앱을 통해서 인터넷 접속 허용
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.test">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Test"
        android:usesCleartextTraffic="true"
        tools:targetApi="31">
        <activity android:name=".Activity_first"/>
        <activity android:name=".MainActivity" android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        </activity>
    </application>

</manifest>

인텐트(Intent)

Android 시스템 내에서 컴포넌트 간의 작업(액션)을 전달하는 메커니즘

액티비티 간에 데이터를 전달하거나 특정 작업을 요청하는 객체

 

startActivity()

  • 다른 액티비티(Activity)를 시작할 때 사용, 즉 현재 화면에서 새로운 화면으로 전환하기 위해 호출하는 매서드
  • 인텐트(Intent) 객체와 함께 사용됨

인텐트(Intent)의 종류

명시적 인텐트(Explicit Intent)

  • 특정 컴포넌트를 명시적으로 지정해서 실행
  • 주로 같은 앱 내에서 사용
  • ex) 특정 액티비티로 화면 전환
Intent intent=new Intent(getApplicationContext(), Activity_first.class);
startActivity(intent);

시작할 앱 구성 요소를 명시적으로 표시함

 

암시적 인텐트(Implicit Intent)

  • 특정 컴포넌트를 지정하지 않고, 작업의 유형을 지정하여 이를 처리할 수 있는 컴포넌트를 Android 시스템이 선택
  • 주로 다른 앱과의 상호작용에 사용
  • ex) 웹 페이지 열기, 사진 공유
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("https://www.google.com"));
startActivity(intent);

시작하기 원하는 작업과 데이터 설정 후 해당 작업을 수행 가능한 앱을 선택하거나 실행하도록 함


명시적 인텐트 / 암시적 인텐트

특징 명시적 인텐트(Explicit Intent) 암시적 인텐트(Implicit Intent)
대상 지정 호출 대상이 명확함(클래스 이름으로 지정) 호출 대상이 명확하지 않음(작업을 수행할 컴포넌트를 시스템이 선택)
용도 같은 앱 내에서 컴포넌트 간 통신 외부 앱 호출이나 시스템 작업 수행
예시 화면 전환(Activity 간 이동), 서비스 시작 웹 브라우저 열기, 연락처 앱 열기 등

작업(Task)과 스택(Stack)

작업(Task)

  • 사용자와 상호 작용하는 액티비티(Activity)들의 모음
  • 작업과 관련된 액티비티들은 시작된 순서대로 스택에 저장됨

  1. 앱이 처음 시작될 때, 해당 앱과 관련된 작업이 없다면 새로운 작업이 생성되고 앱의 메인 액티비티가 스택에 저장됨
  2. 현재 액티비티 A가 새로운 액티비티 B를 시작시키면, 액티비티 B는 스택에 저장되고, 액티비티 A는 stop되지만 그 상태를 유지하고 있음
  3. 사용자가 BACK 버튼을 클릭하면 현재 액티비티B는 스택에서 제거되고(액티비티B는destroy됨), 이전 액티비티A가 재시작(resume)되어 이전 상태 복원됨

※ 해당 동작에서는 동일 액티비티의 여러 인스턴스들이 스택 내에 생성될 수 있음


FLAG_ACTIVITY_CLEAR_TOP 모드

액티비티 스택에서 특정 액티비티를 다시 실행할 때, 해당 액티비티 위에 쌓인 다른 액티비티들을 제거하는 플래그

 

FLAG_ACTIVITY_CLEAR_TOP 모드로 시작 시

  • 해당 액티비티가 현재 작업 내에 이미 존재한다면 새로운 인스턴스를 시작시키지 않고 기존 인스턴스가 재시작됨
Intent intent=new Intent(getApplicationContext(), A1.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent)
공지사항
링크