항상 Android:configChanges="키보드 숨김|방향"을 사용하지 않는 이유는 무엇입니까?
왜 사용하지 않는지 궁금했습니다.android:configChanges="keyboardHidden|orientation"
모든 활동에서 (매번;)) 활동에서?
상품:
- 활동이 순환되는 것에 대해 걱정할 필요가 없습니다.
- 더 빠릅니다
별로 좋지 않습니다.
- 화면 크기에 따라 레이아웃을 변경해야 합니다(예: 두 개의 열이 있는 레이아웃).
불량:
- 다양한 방향으로 다양한 레이아웃을 사용할 수 있는 유연한 방법 없음
- fragment를 사용할 때 그다지 좋지 않음
하지만 우리가 다른 레이아웃을 사용하지 않는다면 왜 사용하지 않습니까?
빠른 배경
기본적으로 Android에서 특정 키 구성 변경이 발생하면(일반적인 예는 방향 변경) Android는 실행 중인 활동을 완전히 다시 시작하여 이러한 변경에 적응할 수 있도록 지원합니다.
를 할 때android:configChanges="keyboardHidden|orientation"
Android Manifest, Android, Android 버전. "키보드를 빼거나 전화기를 돌릴 때 기본 재설정을 수행하지 마십시오. 제가 직접 처리하고 싶습니다. 저는 제가 하고 ."
이게 좋은 일입니까?우리는 곧 ...을 보게 될 것입니다.
걱정 없어요?
우선 다음과 같은 장점이 있습니다.
활동이 순환되는 것에 대해 걱정할 필요가 없습니다.
많은 경우, 사람들은 방향 변경("회전")으로 인해 발생하는 오류가 있을 때 단순히 입력함으로써 해결할 수 있다고 잘못 믿고 있습니다.android:configChanges="keyboardHidden|orientation"
.
그러나 Android:configChanges="키보드 숨김|방향"은 반창고에 지나지 않습니다.실제로 구성 변경을 트리거할 수 있는 방법은 여러 가지가 있습니다.예를 들어, 사용자가 새 언어(예: 로케일이 변경됨)를 선택한 경우 활동은 방향 변경에 의해 수행되는 것과 동일한 방법으로 다시 시작됩니다.원하는 경우 다른 모든 유형의 구성 변경 목록을 볼 수 있습니다.
편집: 하지만 더 중요한 것은, 해커보드가 댓글에서 지적한 것처럼, 앱이 백그라운드에 있고 Android가 메모리를 제거하여 일부 메모리를 확보하기로 결정할 때 활동도 다시 시작됩니다.사용자가 앱으로 돌아오면 Android는 다른 구성 변경이 있는 경우와 동일한 방법으로 활동을 다시 시작하려고 시도합니다.만약 당신이 그것을 감당할 수 없다면 - 사용자는 행복하지 않을 것입니다...
다말해, 사기하를 사용합니다.android:configChanges="keyboardHidden|orientation"
"고객"을 위한 해결책이 아닙니다.올바른 방법은 Android가 다시 시작하는 것에 만족하도록 활동을 코딩하는 것입니다.이것은 앞으로 여러분에게 도움이 될 좋은 방법입니다. 그러니 익숙해지세요.
그럼 언제 사용하면 될까요?
당신이 언급한 것처럼 뚜렷한 이점이 있습니다.회전에 대한 기본 구성 변경사항을 직접 처리하여 덮어쓰면 작업 속도가 빨라집니다.하지만, 이 속도에는 편의성에 대한 대가가 따릅니다.
쉽게 말해, 세로와 가로 모두에 동일한 레이아웃을 사용하면 덮어쓰기를 수행하여 상태가 양호합니다.활동을 완전히 다시 로드하는 대신 보기가 이동하여 나머지 공간을 채웁니다.
그러나 장치가 가로로 되어 있을 때 어떤 이유로 다른 레이아웃을 사용하는 경우 Android가 활동을 다시 로드하면 올바른 레이아웃이 로드되기 때문에 좋습니다.[이러한 활동에서 재정의를 사용하고 런타임에 마법적인 재레이아웃을 수행하려면...음, 행운을 빌어요 - 그건 단순한 것과는 거리가 멀어요]
빠른 요약
이면 약, 만에.android:configChanges="keyboardHidden|orientation"
당신에게 적합합니다, 그럼 그것을 사용하세요.그러나 방향 변경이 전체 활동 다시 시작을 트리거할 수 있는 유일한 방법은 아니기 때문에 변경 시 발생하는 작업을 테스트하십시오.
내 관점에서 보면,가로 모드와 세로 모드 모두에서 레이아웃이 동일한 경우 앱에서 둘 중 하나를 비활성화하는 것이 좋습니다.
제가 이렇게 말하는 이유는 사용자로서 제가 방향을 바꿀 때 앱이 제게 어떤 이점을 제공해 줄 것으로 기대하기 때문입니다.제가 휴대폰을 어떻게 잡는지가 중요하지 않다면, 저는 선택할 필요가 없습니다.
예를 들어 ListView가 있는 앱을 예로 들면 ListItem을 클릭하면 해당 항목에 대한 상세 보기가 표시됩니다.풍경에서는 화면을 두 개로 나누고 왼쪽에는 목록 보기, 오른쪽에는 세부 보기를 배치하여 이 문제를 해결할 수 있습니다.Portrait(사진)에서 목록을 한 화면에 표시한 다음 ListItem(목록 항목)을 선택하면 화면을 세부 보기로 변경합니다.이 경우 방향 변경은 레이아웃이 다를 뿐만 아니라 의미도 있습니다.
왜 그런지 모르겠어요...가끔 다시 시작해도 좋다고 생각합니다...configChanges는 대부분의 경우를 처리합니다...애플리케이션 유형에 따라 문제가 발생할 수 있지만 앱 유형과 앱을 다시 시작할 때 상태를 복원하는 방법에 따라 다릅니다.내 앱 중 하나가 다시 시작되면 사용자가 다시 로그백되고 내 코드에 의해 마지막 활동이 열리고 사용자는 원래 있던 곳으로 돌아가기 위한 몇 가지 단계를 잃지만 큰 문제는 아닙니다.다른 경우에는 일부 상태가 항상 지속되고 재시작 시 일부 상태가 항상 복원됩니다.활동이 다시 시작되었을 때 앱이 사용되지 않았거나...그러니 전혀 문제없습니다...예를 들어 게임에서 이 문제는 문제가 될 수도 있고 제가 모르는 다른 유형의 앱에서 발생할 수도 있습니다.
이렇게 하면 애플리케이션이 정상적인 환경에서 잘 작동합니다.코드는 저장 및 복원에 필요한 수많은 논리 없이도 훨씬 더 읽기 쉬우며 새로운 버그를 만들고 항상 유지 관리해야 합니다.안드로이드가 전원을 끄고 애플리케이션 창을 닫으면 컨텍스트가 사라지고 다시 시작되지만, 이런 일은 특별한 상황에서만 일어나고 새로운 기기에서는 점점 더 드물다고 생각합니다.
날 죽이지만, 난 이걸 여러 애플리케이션에서 꽤 성공적으로 사용해요.Android:configChanges="locale|keyboard|방향|screenLayout|uiMode|screenSize|smallestScreenSize" 그러나 일부 특수한 종류의 애플리케이션에서는 이 방법이 좋지 않을 수 있지만 대부분의 앱은 이 방법으로 사용할 수 있습니다.
네, 선수를 내보내는 것보다 일시 중지하는 것이 더 빠를 것 같습니다.하지만 아직도 멈춤이 있습니다.
이제 노래를 일시 중지하지 않는 솔루션을 찾았습니다.
화면 방향에 대한 구성 변경을 처리할 것임을 매니페스트에 명시한 다음 onConfigurationChanged 메서드를 사용하여 레이아웃 파일을 로드합니다.logCat에서 이 작업을 수행하면 Pause(일시 중지), Create(생성) 및 OnResume(재개)에서 호출되지 않으므로 노래가 일시 중지되지 않습니다.
방향을 처리하도록 매니페스트를 업데이트합니다.
android:configChanges="orientation|screenSize"
이 코드를 추가합니다.
@Override public void onConfigurationChanged(Configuration newConfig) { // TODO Auto-generated method stub super.onConfigurationChanged(newConfig); setContentView(R.layout.activity_main); }
언급URL : https://stackoverflow.com/questions/7818717/why-not-use-always-androidconfigchanges-keyboardhiddenorientation
'programing' 카테고리의 다른 글
Javascript 변수를 PHP POST에 전달 (0) | 2023.08.01 |
---|---|
어떤 키 저장소가 앱에 서명하는 데 사용되었는지 어떻게 알 수 있습니까? (0) | 2023.08.01 |
sysbench 누적 요약을 csv로 변환 (0) | 2023.08.01 |
jQuery: 이미지가 존재하는지 확인합니다. (0) | 2023.08.01 |
델파이의 BDE 대 ADO (0) | 2023.08.01 |