식량과 사료 선행-안드로이드 접이식 스크린 개발 기술점(一)

4640 단어
최근 폴더블 제품에 대한 뉴스가 쏟아지면서 각 휴대전화 업체들도 서서히 자신의 제품을 선보였다.그러나 시장의 일부 앱은 여전히 이런 장비에 잘 어울리지 않아 비정상적이고 앱이 재부팅되는 상황이 자주 발생한다.따라서 나는 다음 몇 편의 글로 접이식 스크린 개발에 있어서 주의해야 할 부분을 지적할 것이다.오늘 우리는 먼저 생명주기에 대해 이야기하는데, 이것은 많은 개발자들이 특히 주의해야 할 점이다.먼저 테스트 코드를 살펴보겠습니다.
public class MainActivity extends AppCompatActivity {

    private final String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(TAG, "onCreate");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d(TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d(TAG, "onDestroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "onRestart");
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        Log.d(TAG, "onSaveInstanceState");
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
        Log.d(TAG, "onRestoreInstanceState");
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Log.d(TAG, "onConfigurationChanged");
    }

}

저는 모든 생명주기와 현장을 회복하는 리셋 방법에 Logcat 출력을 넣었습니다. 화면을 전환할 때 앱의 구체적인 표현을 살펴보겠습니다.
2019-01-30 11:19:00.216 30205-30205/com.example.helloworld D/MainActivity: onPause 2019-01-30 11:19:00.221 30205-30205/com.example.helloworld D/MainActivity: onSaveInstanceState 2019-01-30 11:19:00.227 30205-30205/com.example.helloworld D/MainActivity: onStop 2019-01-30 11:19:00.228 30205-30205/com.example.helloworld D/MainActivity: onDestroy 2019-01-30 11:19:00.325 30205-30205/com.example.helloworld D/MainActivity: onCreate 2019-01-30 11:19:00.326 30205-30205/com.example.helloworld D/MainActivity: hashcode is 89642980 2019-01-30 11:19:00.327 30205-30205/com.example.helloworld D/MainActivity: onStart 2019-01-30 11:19:00.328 30205-30205/com.example.helloworld D/MainActivity: onRestoreInstanceState 2019-01-30 11:19:00.331 30205-30205/com.example.helloworld D/MainActivity: onResume
기본적으로 액티비티는 화면 크기가 바뀔 때 다시 켜지는 것을 볼 수 있습니다.화면 오리엔테이션을 변경하는 동작과 비슷합니다.지금 우리는 두 가지 선택에 직면해 있다.
4
  • 앱을 다시 시작하여 화면 변화에 적응하도록 한다

  • 4
  • 수동으로 데이터를 처리하여 APP가 재부팅되지 않도록 합니다

  • 첫 번째 경우, 우리는 일반적으로 리셋 onSaveInstanceState () 방법에서 데이터를 저장하고, onCreate () 또는 onRestoreInstanceState () 리셋 방법에서 저장된 데이터를 가져와 현장 복구에 사용합니다.그러나 모든 상황에서 앱을 완전하게 리셋해서 화면의 변화에 적응해야 하는 것은 아니다. 화면의 방향을 바꾸는 것과 마찬가지로 우리는 안드로이드 매니페스트에서만 가능하다.xml에 해당하는 Activity 성명에 해당하는 속성 값을 추가하면 됩니다.여기에는 다음이 필요합니다.
    android:configChanges="screenSize|smallestScreenSize|screenLayout"
    

    추가가 완료되면 APP를 다시 실행하고 화면 크기를 반복적으로 변경합니다. 이때 라이프 사이클 콜백 순서는 다음과 같습니다.
    2019-01-30 11:13:02.217 29276-29276/com.example.helloworld D/MainActivity: onCreate 2019-01-30 11:13:02.219 29276-29276/com.example.helloworld D/MainActivity: onStart 2019-01-30 11:13:02.223 29276-29276/com.example.helloworld D/MainActivity: onResume 2019-01-30 11:13:05.289 29276-29276/com.example.helloworld D/MainActivity: onConfigurationChanged
    이 때 Activity는 복구를 제거하지 않고 onConfigurationChanged () 방법만 리셋한 것을 알 수 있습니다.경우에 따라 이 방법을 사용하여 APP 재부팅을 방지할 수 있습니다.그러면 상술한 세 가지 속성 값은 각각 무슨 뜻을 대표하는지 다음 표를 보십시오.
    속성 값
    속뜻
    screenSize
    현재 사용 가능한 화면 크기가 변경되었습니다.이것은 현재 사용 가능한 사이즈의 현재 종횡비에 대한 변화를 나타냅니다. 따라서 사용자가 가로와 세로 사이를 전환할 때 변화가 발생합니다.그러나 Activity는 API 수준 12 이하를 적용할 경우 Android 3.2 이상의 장치에서 실행되는 경우에도 Activity를 다시 시작하지 않고 구성 변경 사항을 자체적으로 처리합니다.
    smallestScreenSize
    물리적 화면 크기가 변경되었습니다.이것은 방향과 무관한 사이즈 변화를 나타내기 때문에 실제 물리적 화면 크기가 변경될 때(예를 들어 외부 모니터로 전환)만 변경됩니다.이 구성의 변경 사항은 smallestWidth 구성의 변경 사항에 해당합니다.그러나 Activity는 API 수준 12 이하를 적용할 경우 Android 3.2 이상의 장치에서 실행되는 경우에도 Activity를 다시 시작하지 않고 구성 변경 사항을 자체적으로 처리합니다.
    screenLayout
    화면 레이아웃이 변경되었습니다. 다른 디스플레이 방식을 활성화했기 때문일 수도 있습니다.
    주: 위 표에서 발췌한 것https://developer.android.com/guide/topics/manifest/activity-element이렇게 해서 우리는 접이식 스크린 전환 스크린에 대한 최적화를 처리했다.

    좋은 웹페이지 즐겨찾기