딜레마 : 프래그먼트와 활동을 사용하는 경우 :
Activities
애플리케이션의 단일 화면을 사용하도록 설계 가능한 Fragments
내부에 구성되어 있고 가능한 UI 레이아웃으로 설계 하고 있습니다.
얼마 만해도 개발해야하고 애플리케이션을 개발했습니다. Activity
응용 프로그램의 내 화면을 나타 내기 위해 를 만들고 ViewPager
또는에 대해 조각를 사용했습니다 Google Maps
. ListFragment
여러 번 발명 할 수 있는 또는 다른 UI를 거의 만들 수 있습니다.
최근에 나는 단지 2가 포함 된 프로젝트에 발견 Activities
하나는이다 SettingsActivity
다른 하나는입니다 MainActivity
. 의 레이아웃은 MainActivity
많은 숨겨진 전체 화면 UI 조각으로 채워 하나만 표시됩니다. 에서 Activity
논리 FragmentTransitions
응용 프로그램의 다른 화면 사이.
이 접근 방식에 대해 제가 좋아하는 점은 응용 프로그램이 사용하기 때문에 ActionBar
그대로 유지되고 화면 애니메이션과 함께 움직이지 않는다는 것입니다 Activity
. 이렇게하면 화면 전환에보다 유창한 느낌을줍니다.
그래서 제가 요청하는 것은 주제에 대한 현재 개발 방식을 공유하는 것입니다. 처음에는 의견 의견 질문처럼 보일 수있는 Android 디자인 및 아키텍처 질문으로 볼 수 있습니다. 의견 기반 하나.
UPDATE (2014 년 1 월 5 일) 에 의해이 프리젠 테이션 테이션에 이어 에릭 버크 에서 광장 (. 내가 말을 안드로이드 개발자를위한 유용한 유용한 도구의 많은 훌륭한 프리젠 테이션입니다 그리고이 광장에 어떤 오전 식 으로든 관련이없는 광장)
http://www.infoq.com/presentations/Android-Design/
지난 몇 달 동안의 개인적인 경험을 통해 애플리케이션을 구성하는 가장 좋은 방법은 애플리케이션의 흐름 을 구성하는 모든 조각 그룹 을 하나의 Activity
. 따라서 기본적으로 Activities
응용 프로그램에서 흐름 수 와 수를 사용 합니다. 이렇게하면 작업의 화면에서 유지되는 모든 흐름을 사용할 수 있습니다. Eric Burke가 말하고 내가 알게 된 Activities
것처럼 가능한 한 적게 사용한다는 철학은 그가 "신"이라고 부르는 활동을 엉망으로 만들기 때문에 모든 상황에 적용 할 수있는 것은 아닙니다.
전문가는 당신을 말할 것입니다 : "나는 사용 여부를 알 수 Activity
또는를 Fragment
". 처음에는 많은 의미가 없지만 시간이 지나면 실제로 필요한지 여부를 알 수 있습니다 Fragment
.
저에게 매우 도움이되는 좋은 방법이 있습니다. 딸에게 뭔가를 설명하려고 할 때 이런 일이 있습니다.
즉, 화면을 물질 상자를 상상해. 이 상자에 다른 화면을로드 할 수 있습니까? 새 상자를 사용하는 경우 첫 번째 상자에서 여러 항목을 복사해야합니까? 대답이 예 이면를 사용 Fragments
합니다. 루트 Activity
가 모든 복제 요소를 보유 할 수 있기 때문에 생성 시간을 절약 할 수 있기 때문에 일부만 교체 할 수 있기 때문 입니다.
그러나 항상 용기 ( ) 가 필요하다는 것을 잊지 않습니다. 구별되는Activity
부품이 분산됩니다. 그래서 내부에 부품이있는 하나의 상자.
상자를 오용하지 마십시오. Android UX 전문가는 ( 카테고리가있는 탐색 창을 다룰 때와 같이) Activity
사용하는 대신 명시 적으로 다른 것을로드해야하는시기를 조언합니다 (YouTube에서 사용할 수 있음 Fragment
). 에 익숙해지면 Fragments
모든 동영상을 볼 수 있습니다. 더욱이 그들은 필수 자료입니다.
지금 당장 UI를보고 Activity
또는 필요한지 알아낼 수 Fragment
있습니까? 새로운 관점을 얻었 었습니까? 당신이 그랬다고 생각합니다.
내 철학은 다음과 가변합니다.
절대적으로 필요한 경우에만 활동을 만듭니다. 많은 조각 트랜잭션을 커밋하는 데 사용할 수있는 백 스택을 사용하여 앱에서 가능한 한 약간의 약간을 만들려고합니다. 또한 다양한 프래그먼트 상관 통신은 활동간에 데이터를주고받는 것보다 훨씬 저렴합니다.
활동 전환은 비용이 많이 들죠? 나는 그렇게 믿는다-이전 활동을 파괴 / 일시 중지 / 중지하고 스택에 푸시 한 다음 새 활동을 생성 / 시작 / 재개해야하기 때문입니다.
파편이 소개 된 이후로 제 철학입니다.
음, (구글의 강의 아마도에 따라 여기 이 가능 때마다 유지하고 제어하는 코드를 더 쉽게, 당신은, 조각을 사용하는 것이 좋습니다, 내가 기억하지 않습니다).
일부 경우에는 프래그먼트를 호스팅하는 활동이 그들 사이를 탐색 / 통신해야하기 때문에 너무 복잡하게 할 수 있습니다.
자신에게 가장 스스로 결정해야한다고 생각합니다. 일반적으로 활동을 조각으로 변환하는 것이 그리 어렵지 않습니다.
이 딜레마에 대한 게시물을 여기 에 작성했습니다 .
모든 경우에서 활동보다 조각을 선호하는 이유.
활동은 비싸다. 프래그먼트에서는 뷰와 속성 상태가 분리됩니다. 프래그먼트가에있을 때마다
backstack
뷰가 삭제됩니다. 따라서 활동보다 훨씬 더 많은 조각을 쌓을 수 있습니다.Backstack
시장 조작. 를 사용하면FragmentManager
모든 프래그먼트를 지우고 프래그먼트 더 많이 삽입하는 것이 있습니다. 그러나 활동의 경우라면 조작하는 것이 악몽이 될 것입니다.훨씬 예측 가능한 수명주기 . 호스트 활동이 재활용되지 않는 한. 백 스택의 조각은 재활용되지 않습니다. 따라서
FragmentManager::getFragments()
특정 Fragment를 찾는 데 사용할 수 있습니다.
Jetpack 이후 로 단일 활동 앱 이 선호되는 아키텍처입니다. 특히 탐색 아키텍처 구성 요소에 유용합니다 .
제 생각에는 실제로 관련이 없습니다. 중요한 할 핵심 요소는
- UI의 일부 (예 : 메뉴)를 자주 쓰는데?
- 태블릿 용 앱인가요?
프래그먼트의 주요 용도는 다중 창 활동을 빌드하는 것 태블릿 / 전화 반응 형 앱에 적합합니다.
활동은 의도를 통해 공유하고 시작할 수있는 응용 프로그램의 블록 / 구성 요소라는 것을 잊지 마십시오! 따라서 애플리케이션의 각 활동은 한 가지 종류의 작업 만 해결해야합니다. 응용 프로그램에 작업이 하나만 있다면 필요한 경우 하나의 활동과 많은 조각이 필요하다고 생각합니다. 물론 다른 작업을 해결하는 향후 활동에서 조각을 재사용 할 수 있습니다. 이 접근 방식은 작업을 명확하고 논리적으로 분리합니다. 또한 서로 다른 조각 집합에 대해 서로 다른 인 텐트 필터 매개 변수를 사용하여 하나의 활동을 유지할 필요가 없습니다. 요구 사항에 따라 개발 프로세스의 디자인 단계에서 작업을 정의합니다.
여기에는 실행 된 활동이 호출 활동을 암시 적으로 파괴하지 않는다는 점을 기억해야합니다. 물론 사용자가 버튼을 클릭하여 페이지로 이동하고 해당 페이지의 활동을 시작하고 현재 페이지를 파괴하도록 설정할 수 있습니다. 이로 인해 많은 오버 헤드가 발생합니다. 제가 드릴 수있는 최고의 가이드는 다음과 같습니다.
** 주 활동과이 활동을 동시에 여는 것이 합당한 경우에만 새 활동을 시작하십시오 (여러 창을 고려하십시오).
여러 활동을하는 것이 합리적 일 때의 좋은 예는 Google 드라이브입니다. 주요 활동은 파일 탐색기를 제공합니다. 파일이 열리면 해당 파일을보기위한 새 활동이 시작됩니다. 열린 문서를 닫지 않고 브라우저로 돌아갈 수있는 최근 앱 버튼을 누른 다음 첫 번째 문서와 동시에 다른 문서를 열 수도 있습니다.
내가 한 일 : 가능한 경우 더 적은 조각을 사용합니다. 불행히도 거의 경우에 가능합니다. 그래서 저는 많은 조각과 약간의 활동으로 끝납니다. 내가 깨달은 몇 가지 단점 :
ActionBar
& 메뉴 : 2 개의 프래그먼트가 다른 제목, 메뉴를
가질 때 다루기 어려울 것입니다. 예 : 새 조각을 추가 할 때 작업 표시 줄 제목을 변경할 수 있지만 팝시backstack
이전 제목을 복원 할 방법이 없습니다. 이 경우 모든 조각에 툴바가 필요할 수 있지만 더 많은 시간을 소비하게 될 것입니다.- 우리가 필요로 할 때
startForResult
, 활동은 있지만 조각에는 없습니다. - 기본적으로 전환 애니메이션이 없습니다.
이에 대한 내 솔루션은 활동을 사용하여 조각을 내부 로 래핑 하는 것입니다. 따라서 별도의 작업 표시 줄, 메뉴 startActivityForResult
, 애니메이션, ...
fragment
오버 액티비티 의 가장 큰 장점은 프래그먼트에 사용되는 코드를 다양한 액티비티에 사용할 수 있다는 것 입니다. 따라서 애플리케이션 개발에서 코드의 재사용 성을 제공합니다 .
에 대한 기본을 제공하는 응용 프로그램 당 하나 개의 활동 사용 fragment
용도 fragment
, 스크린이 fragments
있는 라이트 중량 에 비해 activites
단편이다 재사용 단편되어 더욱 적합 전화 및 태블릿 모두 지원 앱
그중 하나를 자유롭게 사용할 수 있습니다.
기본적으로 앱에 가장 적합한 것이 무엇인지 평가해야합니다. 비즈니스 흐름을 관리하는 방법과 데이터 기본 설정을 저장 / 관리하는 방법에 대해 생각하십시오.
Fragments가 가비지 데이터를 저장하는 방법을 생각해보십시오. 조각을 구현할 때 조각으로 채울 활동 루트가 있습니다. 따라서 너무 많은 프래그먼트로 많은 활동을 구현하려는 경우 앱의 성능을 고려해야합니다. 두 가지 컨텍스트 라이프 사이클을 조작 (거칠게 말함)하므로 복잡성을 기억하십시오.
기억하십시오 : 조각을 사용해야합니까? 왜 안돼?
문안 인사.
더 나은 사용자 경험을 위해 Fragments를 사용합니다. 예를 들어 Button이 있고이를 클릭 할 때 웹 서비스를 실행하려는 경우 부모 활동에 Fragment를 첨부합니다.
if (id == R.id.forecast) {
ForecastFragment forecastFragment = new ForecastFragment();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.replace(R.id.main_content, forecastFragment);
ft.addToBackStack("backstack");
forecastFragment.setArguments(b);
ft.commit();
}
이렇게하면 사용자가 다른 활동으로 이동할 필요가 없습니다.
두 번째로 회전하는 동안 쉽게 처리 할 수 있기 때문에 조각을 선호합니다.
그것은 당신이 정말로 만들고 싶은 것에 달려 있습니다. 예를 들어 navigation drawer
조각을 사용합니다. 탭도 사용 fragments
합니다. 또 다른 좋은 구현은 listview
. 전화기를 회전하고 행을 클릭하면 화면의 나머지 절반에 활동이 표시됩니다. 개인적으로, 나는 사용 fragments
하고 fragment dialogs
더 전문으로. 또한 그들은 회전에서 더 쉽게 처리됩니다.
참고 URL : https://stackoverflow.com/questions/20306091/dilemma-when-to-use-fragments-vs-activities
'ProgramingTip' 카테고리의 다른 글
npm WARN package.json : 저장소 필드 없음 (0) | 2020.09.29 |
---|---|
딥 카피와 얕은 카피의 차이점은 무엇입니까? (0) | 2020.09.29 |
목록 이해력에 권한이 있습니까? (0) | 2020.09.29 |
Visual Studio 솔루션에서 코드 줄을 어떻게 계산합니까? (0) | 2020.09.29 |
WebSockets vs. Server-Sent 이벤트 / EventSource (0) | 2020.09.29 |