[android] 활동, AppCompatActivity, FragmentActivity 및 ActionBarActivity : 언제 사용해야합니까?

쉬운 iOS에서 왔으며 UIViewController를 사용하면됩니다. 그러나 안드로이드에서는 특정 API 레벨에 대한 특정 UIComponent를 사용하면 훨씬 더 복잡해 보입니다. Android 용 BigNerdRanch (책은 대략 2 세)를 읽고 있으며 Activity내 호스팅에 사용 하는 것이 좋습니다 FragmentActivities. 그러나 나는 Activity더 이상 사용되지 않는다고 생각했습니다 .

따라서 API 레벨 22 (API 레벨 15 또는 16에 대한 최소 지원)의 경우 구성 요소를 호스팅하고 구성 요소 자체에 정확히 무엇을 사용해야합니까? 이 모든 용도로 사용됩니까, 아니면 거의 독점적으로 하나 나 둘을 사용해야합니까?



답변

활동이 더 이상 사용되지 않는다고 생각했습니다.

아니.

따라서 API 레벨 22 (API 레벨 15 또는 16에 대한 최소 지원)의 경우 구성 요소를 호스팅하고 구성 요소 자체에 정확히 무엇을 사용해야합니까? 이 모든 용도로 사용됩니까, 아니면 거의 독점적으로 하나 나 둘을 사용해야합니까?

Activity기준선입니다. 모든 활동은 Activity에서 직접 또는 간접적으로 상속 합니다.

FragmentActivitysupport-v4support-v13라이브러리 에있는 프래그먼트의 백 포트와 함께 사용합니다 . 프래그먼트의 기본 구현이 제안 된 minSdkVersion값 보다 낮은 API 레벨 11에 추가되었습니다 . FragmentActivityAPI 레벨 17까지 네이티브 프래그먼트에서 지원되지 않았으므로 중첩 된 프래그먼트 (다른 ​​프래그먼트를 보유하는 프래그먼트)를 사용하려는 경우, 특별히 고려해야 할 유일한 이유 입니다.

AppCompatActivityappcompat-v7도서관 에서 왔습니다 . 기본적으로 이것은 작업 표시 줄의 백 포트를 제공합니다. 기본 조치 표시 줄이 API 레벨 11에 추가되었으므로 필요하지 않습니다 AppCompatActivity. 그러나 현재 버전은 appcompat-v7작업 표시 줄 및 다양한 위젯 측면에서 머티리얼 디자인 미학의 제한된 백 포트를 추가합니다. appcompat-v7이 특정 스택 오버플로 답변의 범위를 넘어서는 사용의 장단점 이 있습니다.

ActionBarActivity의 기본 활동의 이전 이름입니다 appcompat-v7. 여러 가지 이유로, 그들은 이름을 바꾸고 싶었습니다. 사용중인 일부 타사 라이브러리가을 주장하지 않는 경우을 ActionBarActivity선호 AppCompatActivity합니다 ActionBarActivity.

따라서 minSdkVersion15-16 범위의 경우 :

  • 백 포트 된 머티리얼 디자인 룩을 원한다면 AppCompatActivity

  • 그렇지 않은 경우 중첩 된 조각을 원한다면 FragmentActivity

  • 그렇지 않은 경우 Activity

메모에서 주석으로 추가하기 만하면됩니다 : AppCompatActivityextends의 FragmentActivity기능을 사용해야하는 사람은 누구나 사용할 FragmentActivity수 있습니다 AppCompatActivity.


답변

Activity다른 모든 활동의 기본 클래스이므로 더 이상 사용되지 않을 것이라고 생각하지 않습니다. 그들 사이의 관계는 다음과 같습니다.

Activity<- FragmentActivity<- AppCompatActivity<-ActionBarActivity

‘<-‘는 여기서 상속을 의미합니다. 참조는 말했다 ActionBarActivity, 사용되지 않습니다 AppCompatActivity대신.

따라서 기본적으로 사용하는 AppCompatActivity것이 항상 올바른 선택입니다. 그들 사이의 차이점은 다음과 같습니다.

  • Activity 기본입니다.
  • 을 바탕으로 Activity, FragmentActivity사용할 수있는 기능을 제공합니다 Fragment.
  • 에 기반하여 FragmentActivityAppCompatActivity기능을 제공합니다 ActionBar.

답변

2019 : 사용 AppCompatActivity

이 문서를 작성할 당시 (링크가 여전히 유효 한지 확인) Android 설명서AppCompatActivity 는 앱 바를 사용중인 경우 사용을 권장 합니다.

이것은 합리적입니다 :

Android 3.0 (API 레벨 11)부터 기본 테마를 사용하는 모든 활동에는 앱 바로 ActionBar가 있습니다. 그러나 다양한 Android 릴리스에서 기본 작업 표시 줄에 앱 표시 줄 기능이 점차 추가되었습니다. 결과적으로 기본 ActionBar는 기기에서 사용중인 Android 시스템 버전에 따라 다르게 작동합니다. 반대로 최신 기능은 지원 라이브러리의 툴바 버전에 추가되며 지원 라이브러리를 사용할 수있는 모든 장치에서 사용할 수 있습니다.

이러한 이유로 지원 라이브러리의 툴바 클래스를 사용하여 활동의 앱 바를 구현해야합니다. 지원 라이브러리의 도구 모음을 사용하면 광범위한 장치에서 앱이 일관되게 작동 할 수 있습니다. 예를 들어, 툴바 위젯은 Android 2.1 (API 레벨 7) 이상을 실행하는 디바이스에서 머티리얼 디자인 경험을 제공하지만 디바이스가 Android 5.0 (API 레벨 21) 이상을 실행하지 않으면 기본 조치 표시 줄이 머티리얼 디자인을 지원하지 않습니다.

툴바 추가에 대한 일반적인 지침은

  1. v7 appcompat 지원 라이브러리 추가
  2. 모든 활동을 확장하십시오 AppCompatActivity
  3. 매니페스트에서 원하는 것을 선언하십시오 NoActionBar.
  4. ToolBar각 활동의 xml 레이아웃에를 추가하십시오 .
  5. ToolBar각 활동에서를 가져 옵니다 onCreate.

자세한 내용은 설명서 지침 을 참조하십시오. 그들은 매우 명확하고 도움이됩니다.


답변

최소 API 레벨 15의 경우을 사용하려고합니다 AppCompatActivity. 예를 들어 MainActivity다음과 같이 보일 것입니다.

public class MainActivity extends AppCompatActivity {
    ....
    ....
}

를 사용하려면 AppCompatActivityGoogle 지원 라이브러리를 다운로드했는지 확인하십시오 (도구-> Android-> SDK 관리자에서 확인할 수 있음). 그런 다음 앱의 gradle.build 파일에 gradle 종속성을 포함하십시오.

compile 'com.android.support:appcompat-v7:22:2.0'

이것을 AppCompatmain Activity으로 사용하여 조각 또는 다른 활동을 시작하는 데 사용할 수 있습니다 (이는 빌드하는 앱의 종류에 따라 다릅니다).

BigNerdRanch 책은 훌륭한 자료이지만, 구식입니다. Android의 작동 방식에 대한 일반적인 정보는이 설명서를 읽으십시오. 그러나 사용하는 특정 클래스가 최신 버전 인 것은 아닙니다.


답변

Activityclass는 기본 클래스입니다. (원본) 조각 관리 (API 11부터)를 지원합니다. 전문성이 훨씬 우수하기 때문에 더 이상 순수한 사용을 권장하지 않습니다.

ActionBarActivity잠시였다 는 응용 프로그램에서 액션 바 취급이 용이했기 때문에 활동 클래스에 교체.

AppCompatActivity이다 액션 바는 더 이상 권장되지 않기 때문에 갈 새로운 방법 당신은 (현재의 대신 도구 모음을 사용한다 액션 바 교체). AppCompatActivity는 FragmentActivity에서 상속되므로 Fragment Manager를 통해 Fragment를 처리해야하는 경우 가능합니다. AppCompatActivity는 16 세 이상이 아닌 모든 API 용입니다 (누가 말했습니까?). Gradle 파일 에 추가하여 사용할 수 있습니다 . API 10에서 사용하고 완벽하게 작동합니다.compile 'com.android.support:appcompat-v7:24:2.0'


답변

특히 오래된 소스를 읽는 경우 여기에 많은 혼란이 있습니다.

기본은 Activity입니다. 조각을 표시 할 수 있습니다. Android 버전> 4 인 경우이 조합을 사용할 수 있습니다.

그러나, 당신이 언급 한 다른 클래스를 포괄하는 지원 라이브러리는 또한 : FragmentActivity, ActionBarActivityAppCompat. 원래는 Android 버전 <4에서 조각을 지원하는 데 사용되었지만 실제로는 최신 버전의 Android (예 : 머티리얼 디자인)에서 기능을 백 포트하는 데에도 사용됩니다.

최신 버전은 AppCompat이고 다른 하나는 이전입니다. 내가 사용하는 전략은 항상을 사용하는 AppCompat것이므로 향후 버전의 Android에서 백 포트하는 경우 앱이 준비됩니다.


답변

당신에 대해 이야기하면 Activity, AppcompactActivity, ActionBarActivity등 등 …

확장하는 기본 클래스에 대해 이야기해야합니다. 먼저 슈퍼 클래스의 계층 구조를 이해해야합니다.

모든 것은이 모든 클래스의 수퍼 클래스 인 Context에서 시작됩니다.

컨텍스트 는 Android 시스템에서 구현을 제공하는 추상 클래스입니다. 응용 프로그램 별 리소스 및 클래스에 액세스 할 수 있으며 활동 시작, 방송 및 수신 의도 등과 같은 응용 프로그램 수준 작업을위한 전화

Context 뒤에 또는 확장 ContextWrapper

ContextWrapper이 확장 클래스입니다 상황에 맞는 클래스를 간단하게 모든 다른 문맥과의 통화 위임한다. 원래 컨텍스트를 변경하지 않고 동작을 수정하기 위해 서브 클래 싱 할 수 있습니다.

이제 우리는 Activity

활동 확장하는 클래스입니다 ContextThemeWrapper을 사용자가 할 수있는 하나의 초점을 맞춘 것은입니다. 거의 모든 활동이 사용자와 상호 작용하므로 Activity 클래스가 사용자를 위해 창을 만듭니다.

아래 클래스는 확장이 제한되어 있지만 내부적으로 하위 클래스로 확장되어 특정 API를 지원합니다.

SupportActivity는 함께 호환성 기능을 구성하기위한 기본 클래스입니다 활동을 확장하는 클래스이다

BaseFragmentActivityApi14은 확장하는 클래스입니다 SupportActivity을
그것은 클래스 제한되는 기본 클래스이지만 의해 확장되는
BaseFragmentActivityApi16 의 기능을 지원하기 위해 V14을

BaseFragmentActivityApi16은 확장하는 클래스입니다
BaseFragmentActivityApi14 {@code를위한 기본 클래스입니다
FragmentActivity } 사용할 수 있도록 V16의 API를. 그러나 클래스도 제한되어 있지만 FragmentActivity에 의해 V16의 기능을 지원하도록 확장되었습니다.

지금 FragmentActivty

FragmentActivity은 확장하는 클래스이다
BaseFragmentActivityApi16을 하고는 지원 기반 조각 및 로더 API를 사용하고자합니다.

새로운 플랫폼의 내장 프래그먼트 및 로더 지원과 달리이 클래스를 사용하는 경우 getSupportFragmentManager()getSupportLoaderManager()메소드를 각각 사용하여 해당 기능에 액세스 해야합니다 .

ActionBarActivity 는 지원 라이브러리의 일부입니다. 지원 라이브러리는 이전 플랫폼에서 최신 기능을 제공하는 데 사용됩니다. 예를 들어 ActionBar 는 API 11에 도입되었으며 기본적으로 활동의 일부입니다 (실제 테마에 따라 다름). 반대로 이전 플랫폼 에는 ActionBar 가 없습니다 . 지원 라이브러리는 ActionBar의 기능과 UI 를 제공하는 Activity의 하위 클래스 ( ActionBarActivity )를 추가합니다.

2015 년에 ActionBarActivity 는 지원 라이브러리의 개정판 22.1.0에서 더 이상 사용되지 않습니다. 대신 AppCompatActivity를 사용해야합니다.

AppcompactActivity은 확장하는 클래스입니다
FragmentActivity 지원 라이브러리 작업 표시 줄 기능을 사용하여 활동의 기본 클래스입니다.

활동에 대한이 클래스를 확장하고 활동 테마를 유사한 테마 로 설정하여 API 레벨 7 이상에서 실행할 때 활동에 ActionBar 를 추가 할 수 있습니다.Theme.AppCompat

여기

나는이 두 가지를 참조 하나 ,