activity1 및 activity2의 두 가지 활동이 있다고 가정합니다. activity1에서 activity2로 이동하고 activity2에서 일부 정보를 가져 와서 다시 activity1에 삽입하고 싶습니다. 또한 이전 상태로 놓치지 않고 이전 activity1을 잃고 싶습니다. 어떻게 상태를 저장할 수 있습니까?onResume 및 onPause를 사용하는 경우
답변
onSaveInstanceState(Bundle)
을 activity1
에 덮어 원하는 데이터를 저장 한 다음 동일한 활동에 onRestoreInstanceState(Bundle)
을 다시 적용하여 값을 다시 가져옵니다. Bundle
을 사용하면 원하는 모든 데이터를 저장할 수 있습니다. 다음과 같이 추천합니다 :
public class MainActivity extends Activity {
...
public static final String DATA1_KEY = "data1";
private boolean value1;
...
@Override
protected void onSaveInstanceState (Bundle outState) {
outState.putBoolean(DATA1_KEY, value1);
}
@Override
protected void onRestoreInstanceState (Bundle savedInstanceState) {
value1 = savedInstanceState.getBoolean(DATA1_KEY);
}
}
런타임에만 데이터를 보존하려면 정적 멤버를 사용하는 것이 좋습니다. 그런 다음 모든 활동에서이 구성원을 액세스하고 조작 할 수 있습니다. 예를 들면 :
public class FirstActivity extends Activity
{
public static String data = null;
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(...);
data = "This is a test!";
}
}
두 번째 활동에서 당신은 당신이 안전하고 더 우아하게 게터/세터 기능을 추가 할 수 있습니다 물론
public class SecondActivity extends Activity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(...);
if(FirstActivity.data!=null)
{
//You can use it:
System.out.println(FirstActivity.data);
}
}
}
처럼이 정적 변수에 액세스 할 수 있습니다.
- SharedPreferences
- SQLite
- 또는 온라인 데이터베이스에 데이터를 저장 : 당신이 더 긴 시간을 저장하려면
의 사용을 고려하시기 바랍니다. 당신이 설명하는 것을
는 Activity.startActivityForResult()
방법을 사용하는 완벽한 고전 이유입니다.
그래서실행이 완료되면 당신은 결과를하고자하는 활동을 :
구글이 방법 설명서에 쓴이
. 이 활동 종료가, 당신의 onActivityResult를() 메소드가 주어진 requestCode가
당신이해야 할 것은 호출 될 때 : 결과에 대한 당신의 activity1에 시작 활동에서, 그리고 activity2에에서 원하는 데이터로 setResult(int resultCode, Intent data)
방법을 사용 당신의 활동 1 돌아가, 그리고 finish()
(그것은 동일한 상태에서 다시 onActivityResult()
로 돌아갈 것입니다 activity1 전에했다 ..).
사용자가 새로운 활동을 시작하는 작업을 앱에서 수행합니다. 현재 활동은 두 번째 활동이 작성 될 때 중지됩니다. 그런 다음 사용자가 뒤로 단추를 누르면 첫 번째 활동이 다시 시작됩니다.
활동이 중지되면 활동 객체는 메모리에 상주하고 활동이 재개 될 때 호출됩니다.Resumed 상태에 이르는 콜백 메소드 중 생성 된 구성 요소를 다시 초기화 할 필요가 없습니다. 또한 시스템은 레이아웃의 각보기에 대한 현재 상태를 추적하므로 사용자가 EditText 위젯에 텍스트를 입력하면 해당 내용이 보존되어 저장 및 복원 할 필요가 없습니다.
주 :이 멈췄 동안 시스템이 활동을 파괴하더라도, 그것은 여전히보기 번들 (키 - 값 쌍의 BLOB)에서 (예 : 글고에서 텍스트) 객체 및 복원의 상태를 유지 사용자가 활동의 동일한 인스턴스로 다시 탐색하는 경우
CommonsWare는 here 메시지 : 사용자가 활동을 마친 을 나타낸 것처럼
사용자 "를 눌러 이전 버튼"다음 에서 번들 onSaveInstanceState()가 (존재하는 경우), 삭제되는 경우. onSaveInstanceState() 번들은 사용자가 활동 (예 : 들어오는 전화 통화 허용)을 마치고 로 끝났다고 말하지 않은 경우에 사용됩니다. Android 은 RAM을 확보하기 위해 활동을 파괴하도록 선택합니다. 이상이 라이프 사이클 콜백의 일부가 아니므로 onSaveInstanceState (번들)의 대신 ) onPause (에 영구 데이터를 저장하는 것이 중요하다
하는 것으로, 이렇게 것이다 :
그리고 문서
말한다 설명서에 설명 된대로 과 같은 모든 상황에서 호출해서는 안됩니다. 즉
, onPause()와 onResume() 대신 onSaveInstanceState (번들)와 onRestoreInstanceState (번들)에 비 개체보기 위해 저장/복원 코드를 삽입. 마지막으로 나는 상태를 저장할 필요가 없다. 만약 뷰 객체가이고 다른 상태가 있다면 preferences
, file
또는 sqlite
을 onPause()
에 저장하고 onResume()
에 저장하면된다.
당신은이 페이지에서 자세한 내용을 볼 수 있습니다
Stopping and Restarting an Activity
Saving Activity state in Android
Android wont save the current state of an activity
- 1. onResume, onStart 및 onRestart를 사용하는 Android 예제
- 2. 응용 프로그램에서 OnPause 및 OnResume 사용
- 3. onResume() 문제
- 4. android onresume?
- 5. soundpool 및 setOnLoadCompleteListener를 사용하는 경우
- 6. /proc 및/dev를 사용하는 경우
- 7. Android 액티비티 onResume() 및 onActivityResult() 충돌
- 8. onPause 및 onResume 후에 MediaPlayer가 작동하지 않습니다.
- 9. GLSurfaceView 라이프 사이클 메소드 onPause() 및 onResume()
- 10. 안드로이드에서 onStart 및 onResume 메서드는 어떻게 작동합니까?
- 11. WidgetLocker onResume onPause
- 12. Android : 뒤로 (및 방향 변경)을 누르면 onPause를 구현 한 후 멈춤 현상이 발생합니다.
- 13. Android onResume 레이아웃 문제
- 14. onResume() 이후의 종횡비가 잘못되었습니다.
- 15. android sqlite onresume() oncreate()
- 16. 안드로이드 서비스를위한 onresume 메소드
- 17. Android-onResume() in Paint
- 18. onResume for WallpaperService
- 19. 이상한 onResume() 내가 예외
- 20. onPause, Android의 onResume 이벤트
- 21. 안드로이드 타이머 예외 onResume
- 22. Android : 메인 활동의 onResume()
- 23. 안드로이드 -의 GridView의 onResume
- 24. 시작시 문제가있는 onResume
- 25. 사용하는 경우?
- 26. C++에서 NSOperation 및 NSOperationQueue를 사용하는 경우
- 27. Runtime.maxMemory() 및 totalMemory()를 사용하는 경우
- 28. WPF에서 TemplateBinding 및 TemplatedParent를 사용하는 경우
- 29. sync 및 startAt에서 flexslider를 사용하는 경우
- 30. 모노로 mvc3 및 mysql.data를 사용하는 경우 예외
@ user1576427 내 편집을 참조하십시오. – hasanghaforian