IT story

항상 android : configChanges =“keyboardHidden | orientation”을 사용하지 않는 이유는 무엇입니까?

hot-time 2020. 5. 24. 10:53
반응형

항상 android : configChanges =“keyboardHidden | orientation”을 사용하지 않는 이유는 무엇입니까?


android:configChanges="keyboardHidden|orientation"모든 (거의 모든;) 활동에 사용하지 않는지 궁금했습니다 .

상품:

  • 당신의 활동이 회전에 대해 걱정할 필요가 없습니다
  • 더 빠르다

그렇게 좋지 않다 :

  • 화면 크기에 따라 레이아웃을 변경해야합니다 (예 : 열이 두 개인 레이아웃)

나쁜:

  • 다른 방향으로 다른 레이아웃을 갖는 유연한 방법이 없음
  • 조각을 사용할 때 그렇게 좋지 않습니다

그러나 다른 레이아웃을 사용하지 않는다면 왜 안됩니까?


빠른 배경

기본적으로 Android에서 특정 키 구성 변경이 발생하는 경우 (일반적인 예는 방향 변경), Android는 실행중인 활동을 완전히 다시 시작하여 해당 변경에 맞게 조정합니다.

android:configChanges="keyboardHidden|orientation"AndroidManifest에서 정의 할 때 Android에 다음과 같이 말합니다. "키보드를 뽑거나 휴대 전화를 회전 할 때 기본 재설정을 수행하지 마십시오.이 문제를 직접 처리하고 싶습니다. 예, 내가하는 일을 알고 있습니다 "

이것이 좋은가요? 곧 보자 ...

걱정 마?

당신이 시작하는 전문가 중 하나는 다음과 같습니다.

당신의 활동이 회전에 대해 걱정할 필요가 없습니다

많은 경우에 사람들은 방향 변경 ( "회전")으로 인해 오류가 발생하면를 입력하여 간단히 수정할 수 있다고 잘못 생각합니다 android:configChanges="keyboardHidden|orientation".

그러나 android : configChanges = "keyboardHidden | orientation"은 반창고에 지나지 않습니다. 실제로 구성 변경을 트리거 할 수있는 여러 가지 방법이 있습니다. 예를 들어 사용자가 새 언어를 선택하면 (예 : 로캘이 변경됨) 방향 변경과 같은 방식으로 활동이 다시 시작됩니다. 원하는 경우 모든 다른 유형의 구성 변경 목록을 볼 수 있습니다 .

편집 : 더 중요한 것은 hackbod 가 의견에서 지적했듯이 앱이 백그라운드에 있고 안드로이드가 메모리를 제거하여 메모리를 확보하기로 결정하면 활동이 다시 시작됩니다. 사용자가 앱으로 돌아 오면 Android는 다른 구성 변경이있을 때와 동일한 방식으로 활동을 다시 시작하려고 시도합니다. 당신이 그것을 처리 할 수 ​​없다면-사용자는 행복하지 않을 것입니다 ...

다시 말해, 사용 android:configChanges="keyboardHidden|orientation"은 "걱정"에 대한 해결책이 아닙니다. 올바른 방법은 활동을 코딩하여 다시 시작하는 Android에 만족할 수 있도록 활동을 코딩하는 것입니다. 이것은 길 아래로 도움이되는 좋은 습관이므로 익숙해 지십시오.

언제 사용해야합니까?

언급했듯이 뚜렷한 이점이 있습니다. 회전을 직접 처리하여 기본 구성 변경 사항을 덮어 쓰면 작업 속도가 빨라집니다. 그러나이 속도에는 편의가 제공됩니다.

간단히 말해 세로 및 가로 모두에 동일한 레이아웃을 사용하는 경우 덮어 쓰기를 수행하는 것이 좋습니다. 액티비티를 완전히 새로 고침하는 대신 나머지 공간을 채우기 위해 뷰가 이동합니다.

그러나 어떤 이유로 기기가 가로 방향 일 때 다른 레이아웃을 사용하는 경우 Android에서 액티비티를 다시로드한다는 사실은 올바른 레이아웃을로드하기 때문에 좋습니다. [그런 액티비티에서 재정의를 사용하고 런타임에 마법의 재 레이아웃을하고 싶다면 ... 행운을 빌어 요-간단하지는 않습니다.]

빠른 요약

android:configChanges="keyboardHidden|orientation"맞다 꼭 사용하십시오. 하지만 제발 테스트해야 무슨 일 때 뭔가 변경, 방향 변경이 전체 Acitivity 다시 시작 트리거 할 수있는 유일한 방법이 아니기 때문에.


내 관점에서 : 가로 및 세로 모드에서 레이아웃이 동일하면 앱에서 두 가지 중 하나를 비활성화 할 수도 있습니다.

내가 말한 이유는 사용자가 방향을 바꿀 때 앱이 나에게 어떤 이점을 제공 할 것으로 기대하기 때문입니다. 휴대 전화를 들고있는 방법이 중요하지 않으면 선택할 필요가 없습니다.

예를 들어 ListView가있는 앱을 사용하고 ListItem을 클릭하면 해당 항목에 대한 상세보기가 표시됩니다. 가로 방향으로 화면을 두 개로 나누면 왼쪽에 ListView가 있고 오른쪽에 자세한보기가 표시됩니다. Portrait에서는 하나의 화면에 목록을 표시 한 다음 ListItem을 선택하면 화면을 상세보기로 변경합니다. 이 경우 다른 레이아웃뿐만 아니라 방향 변경도 의미가 있습니다.


왜 그런지 모르겠습니다 .... 가끔 재시작이 괜찮습니다 ... configChanges는 대부분의 경우를 처리합니다 ... 어쩌면 일부 유형의 응용 프로그램에서는 문제가 될 수 있지만 실제로는 응용 프로그램 유형과 복원 방법에 따라 다릅니다 앱이 다시 시작될 때 상태 ... 내 앱 중 하나가 다시 시작되면 사용자가 다시 로그인하고 내 코드에 의해 마지막 활동이 열리고 사용자 jus는 자신이 있었지만 큰 일이 아닌 곳으로 되돌아 갈 몇 가지 단계를 잃습니다. 다른 일부 상태는 항상 유지되고 다시 시작하면 일부 상태는 항상 복원됩니다. 활동이 다시 시작되면 응용 프로그램이 사용되지 않았거나 무언가가 없어야했습니다. 그래서 전혀 문제가 없습니다 ... 예를 들어 게임에서 문제가 될 수도 있고 모르는 다른 유형의 응용 프로그램에서도 문제가 될 수 있습니다 ...

이 방법으로 응용 프로그램을 정상적인 상황에서 제대로 작동한다고 말합니다. 그리고 코드는 새로운 버그를 만들고 항상 유지 해야하는 저장 및 복원에 필요한 많은 논리없이 훨씬 더 읽을 수 있습니다 ... 안드로이드 전원이 꺼져 응용 프로그램 창을 죽이면 컨텍스트와 다시 시작하지만 이것은 특별한 상황에서만 발생하며 최신 장치에서는 이것이 점점 더 드 rare니다 ...

그래서 나를 죽여라. 그러나 나는 응용 프로그램에서 이것을 꽤 성공적으로 사용한다 ... android : configChanges = "locale | keyboard | keyboardHidden | orientation | screenLayout | uiMode | screenSize | smallestScreenSize"그러나 어떤 종류의 응용 프로그램에서는 그렇지 않을 수도 있음을 이해합니다 좋은 방법이지만 대부분의 앱은 이대로도 살 수 있습니다.


Yeah I think pausing will make it quicker than releasing the player. Still have the pause though.

Have now found a solution that won't pause the song.

State in the manifest that you will handle the config change for screen orientation and then use the onConfigurationChanged method to load the layout file. By doing this in logCat I can see onPause, onCreate & onResume aren't called, and therefore the song isn't paused.

  1. update the manifest to handle the orientation.

    android:configChanges="orientation|screenSize"
    
  2. add this code

    @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

반응형