식량과 사료 선행-안드로이드 접이식 스크린 개발 기술점(一)
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
첫 번째 경우, 우리는 일반적으로 리셋 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이렇게 해서 우리는 접이식 스크린 전환 스크린에 대한 최적화를 처리했다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.