활동 소개

Activity 클래스는 Android의 중요한 구성요소 활동이 시작되고 결합되는 방식은 플랫폼 애플리케이션 모델의 일부입니다. 기존의 프로그래밍 패러다임과 달리 main() 메서드로 실행되는 앱인 경우 Android 시스템은 다음과 같은 방법으로 Activity 인스턴스의 코드를 시작합니다. 호출의 특정 단계에 해당하는 특정 콜백 메서드를 수명 주기를 지원합니다

이 문서에서는 활동의 개념을 소개한 후 간단한 가이드를 참고하세요. 앱 설계 권장사항에 관한 추가 정보는 참조 앱 아키텍처 가이드를 참조하세요.

활동의 개념

모바일 앱 환경은 데스크톱과 다른 점이 있습니다. 사용자와 앱의 상호작용이 항상 같은 장소에서 시작되는 것은 아닙니다. 대신 사용자 여정은 흔히 비결정론적으로 시작됩니다. 예를 들어 홈 화면에서 이메일 앱을 열면 이메일 목록입니다. 반면에 소셜 미디어 앱을 사용하면 이메일 앱을 실행하면 이메일 앱의 화면으로 바로 이동하여 도움이 될 수 있습니다.

Activity 클래스는 이 패러다임을 촉진하도록 설계되었습니다. 한 앱이 다른 앱을 호출하면 호출 앱이 다른 앱의 활동을 호출합니다. 전체 앱을 정의합니다. 이렇게 하면 활동이 사용자와 앱의 상호작용 진입점입니다. 사용자는 활동을 Activity 클래스의 서브클래스로 정의합니다.

활동이 앱이 그리는 창을 제공 살펴봤습니다 이 창은 일반적으로 화면을 채우지만 더 작을 수도 있습니다. 다른 창 위에 플로팅됩니다. 일반적으로 하나의 활동은 앱에 한 화면을 구현합니다. 예를 들어 앱의 활동 중 하나가 환경설정 화면을 구현하고 다른 활동이 사진 선택 화면

대부분의 앱에는 여러 개의 화면이 포함되어 있어 여러 화면으로 구성됩니다. 있습니다. 일반적으로 한 앱에서 활동 중 하나는 기본 activity를 제공하며, 이는 사용자가 앱을 실행할 때 표시되는 첫 번째 화면입니다. 그러면 각 활동은 다른 활동을 시작하여 수행할 수 있습니다 예를 들어 간단한 이메일의 주요 활동은 앱에서 이메일 받은편지함을 보여주는 화면을 제공할 수 있습니다. 여기에서 주요 액티비티는 그와 같은 작업을 위한 화면을 제공하는 다른 활동을 이메일 작성과 개별 이메일 열기.

여러 활동이 함께 작동하여 플랫폼에서 일관된 사용자 경험을 형성하지만 각 활동이 다른 활동에만 느슨하게 결합됩니다. 그 어떤 플랫폼보다도 일반적으로 앱의 활동 간 종속 항목을 최소화합니다. 실제로 활동은 종종 다른 앱에 속한 활동을 시작합니다. 예를 들어 브라우저 앱이 소셜 미디어 앱의 공유 활동을 시작할 수 있습니다.

앱에서 활동을 사용하려면 활동에 관한 정보를 앱의 매니페스트에 관한 권한을 가지며, 개발자는 활동 수명 주기를 적절하게 관리해야 합니다. 이 문서의 나머지 부분에서는 이러한 주제를 소개합니다.

manifest 구성

앱에서 활동을 사용할 수 있으려면 활동, 및 특정 속성을 포함할 수 있습니다.

활동 선언

활동을 선언하려면 매니페스트 파일을 열고 <활동> 요소를 <애플리케이션> 요소가 포함됩니다. 예를 들면 다음과 같습니다.

<manifest ... >
  <application ... >
      <activity android:name=".ExampleActivity" />
      ...
  </application ... >
  ...
</manifest >

이 요소의 유일한 필수 속성은 android:name - 액티비티의 클래스 이름을 지정합니다. 또한 속성 추가 는 라벨, 아이콘 또는 UI 테마와 같은 활동 특성을 정의하는 것입니다. 이러한 속성과 기타 속성에 대한 자세한 내용은 <활동> 요소 참조 문서를 참조하세요.

참고: 앱을 게시한 후에는 활동을 변경하면 안 돼 이름을 지정할 수 있습니다 활동 이름을 변경하면 앱 바로가기와 같은 일부 기능이 작동하지 않을 수 있습니다. 게시 후 피해야 할 변경사항에 관한 자세한 내용은 다음을 참고하세요. <ph type="x-smartling-placeholder"></ph> 변경할 수 없는 항목을 참조하세요.

인텐트 필터 선언

인텐트 필터 Android 플랫폼의 매우 강력한 기능입니다. 그들은 활동 시작에 도움이 되는 기능을 제공할 뿐 아니라 명시적 요청일 뿐만 아니라 암시적 요청이기도 합니다. 예를 들어 명시적 요청은 시스템에 "이메일 보내기 활동을 시작"하라고 Gmail 앱에서' 반면에 암시적 요청은 '모든 기기에서 이메일 보내기 화면을 시작'하여 활동을 한다고 합시다." 시스템 UI가 사용자에게 사용할 앱을 묻는 경우 이것이 바로 인텐트 필터입니다.

이 기능을 활용하려면 <인텐트 필터> 속성() <activity> 요소에 포함됩니다. 이 요소의 정의에는 <action> 요소 및 원하는 경우 <category> 요소 및/또는 <data> 요소가 포함됩니다. 이러한 요소는 결합하여 활동이 응답할 수 있는 인텐트의 유형을 지정할 수 있습니다. 대상 다음 코드 스니펫은 텍스트 데이터를 전송하고 다른 활동으로부터 요청을 받습니다.

<activity android:name=".ExampleActivity" android:icon="@drawable/app_icon">
    <intent-filter>
        <action android:name="android.intent.action.SEND" />
        <category android:name="android.intent.category.DEFAULT" />
        <data android:mimeType="text/plain" />
    </intent-filter>
</activity>

이 예를 들어 <action>은 요소는 이 활동이 데이터를 전송한다고 지정합니다. <category> 선언 요소를 DEFAULT로 사용하면 활동이 사용 설정됩니다. 시작 요청을 받을 수 있습니다 <data> 요소는 지정하는 보낼 수 있습니다. 다음 코드 스니펫은 활동:

Kotlin

val sendIntent = Intent().apply {
    action = Intent.ACTION_SEND
    type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, textMessage)
}
startActivity(sendIntent)

자바

// Create the text message with a string
Intent sendIntent = new Intent();
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.setType("text/plain");
sendIntent.putExtra(Intent.EXTRA_TEXT, textMessage);
// Start the activity
startActivity(sendIntent);
앱이 독립 실행형으로 되고 다른 앱이 활성화되는 것을 허용하지 않으려는 경우 별다른 조치를 취하지 않아도 다른 인텐트 필터가 필요합니다. 원하지 않는 활동 인텐트 필터가 없어야 하며, 명시적 인텐트를 사용하여 직접 시작할 수 있습니다 자세한 내용은 자세한 내용은 인텐트 인텐트 필터 등입니다.

권한 선언

매니페스트의 <ph type="x-smartling-placeholder"></ph> <activity> 태그 특정 활동을 시작할 수 있는 앱을 선택합니다. 상위 활동은 두 활동이 동일한 권한을 가지고 있지 않는 한 합니다. 단일 <ph type="x-smartling-placeholder"></ph> <uses-permission> 요소의 경우 각 하위 활동에 일치하는 <ph type="x-smartling-placeholder"></ph> <uses-permission> 요소가 포함됩니다.

예를 들어 앱에서 SocialApp이라는 가상의 앱을 사용하려는 경우 소셜 미디어에서 게시물을 공유하려면 SocialApp 자체에서 권한을 정의해야 합니다. 이를 호출하는 앱에는 다음이 있어야 합니다.

<manifest>
<activity android:name="...."
   android:permission=”com.google.socialapp.permission.SHARE_POST”

/>

그런 다음 SocialApp을 호출할 수 있으려면 앱이 SocialApp 매니페스트:

<manifest>
   <uses-permission android:name="com.google.socialapp.permission.SHARE_POST" />
</manifest>

권한 및 보안 전반에 대한 자세한 내용은 다음을 참조하세요. 보안 및 권한.

활동 수명 주기 관리

활동은 수명 주기 전체 기간에 걸쳐 여러 상태를 거칩니다. 상태 간 전환을 처리하는 데 일련의 콜백을 사용할 수 있습니다. 다음 섹션 이러한 콜백을 도입합니다.

onCreate()

이 콜백을 구현해야 합니다. 이 콜백은 시스템이 있습니다. 구현에서 기본 구성요소를 초기화하고 있습니다. 예를 들어, 앱은 뷰를 생성하고 데이터를 확인하세요. 가장 중요한 것은, 호출하기 전에 setContentView() 활동의 사용자 인터페이스를 위한 레이아웃을 정의합니다.

onCreate()가 완료되면 다음 콜백은 항상 onStart()입니다.

onStart()

onCreate()가 종료되면 활동은 시작됨 상태로 전환되고 활동이 사용자에게 표시됩니다. 이 콜백에는 활동을 위한 최종 준비에 해당하는 전면에 표시되고 상호작용이 가능해집니다.

onResume()

활동이 상호작용을 시작하기 직전에 시스템이 이 콜백을 호출합니다. . 이 시점에서 활동은 활동의 맨 위에 있습니다. 모든 사용자 입력을 캡처합니다 앱의 핵심 기능 대부분은 onResume() 메서드에 구현됩니다.

onPause() 콜백은 항상 onResume()을 따릅니다.

onPause()

활동이 손실되면 시스템은 onPause()를 호출합니다. 일시중지 상태로 전환됩니다. 예를 들어 사용자가 뒤로 또는 최근 버튼을 탭합니다. 시스템에서 내 활동에 대한 onPause() 기술적으로는 활동이 여전히 부분적으로 보일 수 있지만, 대부분의 경우 이것은 사용자가 Activity를 떠나면 Activity가 곧 중지됨 또는 재개됨 상태.

사용자가 일시중지됨 상태인 활동은 계속 UI를 업데이트할 수 있습니다. UI가 업데이트될 것으로 예상됩니다. 이러한 활동의 예에는 탐색을 보여주는 활동이 포함됩니다. 지도 화면이나 재생 중인 미디어 플레이어가 있습니다. 그러한 활동이 포커스를 잃더라도 사용자는 UI가 계속 업데이트될 것으로 예상합니다.

다음과 같은 표현을 사용해서는 안 됩니다. onPause()하여 애플리케이션 또는 사용자 저장 네트워크 호출을 하거나 데이터베이스 트랜잭션을 실행할 수 있습니다. 데이터 저장에 대한 자세한 내용은 페이지를 참조하세요. 활동 상태 저장 및 복원

onPause() 실행이 완료되면 다음 콜백은 onStop() 또는 onResume()에 따라 달라집니다. 활동이 일시중지됨 상태로 전환된 후 발생합니다.

onStop()

다음과 같은 경우 시스템은 onStop()를 호출합니다. 더 이상 사용자에게 표시되지 않습니다. 이는 활동이 소멸되고 새로운 활동이 시작 또는 기존 활동이 시작되어 재개됨 상태이며 중지된 활동을 다루고 있습니다. 이러한 모든 경우 중지된 활동은 더 이상 있습니다.

시스템이 호출하는 다음 콜백은 onRestart(): 사용자와 상호작용하기 위해 다시 돌아오거나 onDestroy() 이 활동이 완전히 종료되는지를 나타냅니다.

onRestart()

'중지됨' 상태의 활동이 다음 상태일 때 시스템은 이 콜백을 곧 다시 시작합니다. onRestart() 활동이 중지된 시간부터 활동의 상태를 복원합니다.

이 콜백 뒤에는 항상 onStart()

onDestroy()

시스템은 활동이 소멸되기 전에 이 콜백을 호출합니다.

이 콜백은 활동이 수신하는 마지막 콜백입니다. onDestroy(): 일반적으로 활동의 모든 리소스가 언제든지 해제되어야 합니다.

이 섹션에서는 이 주제에 관한 소개만 제공합니다. 자세한 내용은 활동 수명 주기 및 관련 콜백에 관한 자세한 처리 자세한 내용은 활동 수명 주기와 같습니다.