Activity가 시스템에서 실수로 회수되었을 때 임시 데이터를 보존하는 방법 onSaveInstanceState(Bundle outState)
4362 단어 android
4
new Handler().post(new Runnable() {
publicvoid run() {
// TODO Auto-generated method stub
Runtime.getRuntime().exit(1);
}
});
onSaveInstanceState 함수를 덮어쓸 때 부모 클래스 대응 함수, 즉 슈퍼를 호출하는 것을 기억하십시오.Ave Instance State () 는 부모 클래스의 이 함수의 역할은android가 제공하는 각view 클래스인 EditText 등의 데이터를 저장하는 것이기 때문이다.android의 각view 클래스는 자신의 데이터를 저장하는 함수를 제공한다. 예를 들어EditText에 텍스트를 입력하면 이 텍스트 데이터는 저장되고 이 저장 행위는 슈퍼에 있다.onSaveInstanceState () 에서 실행되며, 이 EditText는 레이아웃 속성에 id 속성을 추가해야 합니다. 그렇지 않으면 데이터를 저장할 수 없습니다.마찬가지로 onRestore InstanceState 함수를 덮어쓸 때도 슈퍼를 호출합니다.onRestoreInstanceState () 함수는 EditText 등android를 복구하는 View 클래스의 데이터에 대응합니다.상기 내용은 가로세로 화면 전환 시 onSaveInstanceState를 호출한다고 언급했지만 이것도 조건이 있다. 프로그램이 핸드폰의 특정 설정을 가로세로 화면 전환 등 처리를 설정했을 때 manifest 파일에 activity 라벨에android:configChanges = "orientation|screenSize"(API 13 이후 이렇게 설정해야 함)그러면 가로 세로 화면 전환 시 onConfigurationChanged(Configuration newConfig) 함수만 호출되고 activity의 생명주기 함수는 호출되지 않기 때문에 onSaveInstanceState 함수도 호출되지 않습니다.
예: 시스템이 예기치 않게 활동을 회수한 경우임시 데이터 보존 onSaveInstanceState(Bundle outState)
public class MainActivity extends Activity
{
private EditText et;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//
// :
//MainActivity.this.getClass().getName().toString()----------.
//MainActivity.this.getClass().getSimpleName().toString()----
//
Log.e(MainActivity.this.getClass().getSimpleName().toString(), " ");
et = (EditText) findViewById(R.id.et);
if(savedInstanceState != null)
{
String tempData = savedInstanceState.getString("key");//temp
et.setText(tempData);
et.setSelection(tempData.length());
}
}
@Override
protected void onSaveInstanceState(Bundle outState)//state n/v
{
super.onSaveInstanceState(outState);
String tempData = et.getText().toString();
outState.putString("key", tempData);
}
}
【주의】:
API 21은 Activity에 새로운 속성을 추가했습니다.persist Across Reboots로 설정하면 Activity는 지속적인 능력을 가지게 됩니다. 또한 새로운 bundle에 협조해야 합니다. 그것이 바로Persistable Bundle입니다.
onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
Same as
onCreate(android.os.Bundle)
but called for those activities created with the attribute persistableMode
set to persistAcrossReboots
. 이곳의 지속화는 전통적인 의미와 달리Activity에서 다시 불러오는 onSaveInstanceState, onRestoreInstanceState와 onCreate 방법을 구체적으로 실현한다.
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState)
public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle persistentState)
public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState)
Active Instance State와 On Restore Instance State 방법은 재난을 구제하는 방법입니다. 정상적인 Activity 생명 주기에 있지 않고, 가로세로 화면 전환, 홈 키 누르기 등 돌발적인 이상 상황만 촉발합니다. API 21 이후 Persistable Bundle 파라미터가 추가되어 시스템이 꺼진 후 데이터를 복구할 수 있습니다.
Manifest의 activity에서 속성만 설정하면 됩니다.
(이 슬라이드에는 API 21 이상에 있는 구멍이 있습니다. 위의 세 가지 방법을 사용할 경우 Manifest에서 이 속성을 설정해야 합니다. 그렇지 않으면 레이아웃 컨트롤이 표시되지 않으며 Activity가 정상적으로 작동하지 않으며 라이프 사이클 방법이 비정상적으로 호출됩니다.
android:persistableMode="persistAcrossReboots"
그리고 액티비티에서 상술한 세 가지 방법을 직접 사용하면 된다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.