336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
안드로이드폰은 화면 회전이 지원된다.
키보드를 열거나 닫으면 가로보기/세로보기로 전환이 되는데, 이때 UI가 새로 그려지면서 Activity의 onDestroy()와 onCreate() 가 수행된다.
위 과정이 수행되고 나면, Activity 에서 가지고 있었던 변수들(field 도 포함)이 초기 상태로 된다.
만약, 코드에서 Thread를 만들어 돌아가는 중이었다면, 화면 회전을 한 후에는 사라지는 현상이다.
해결방법은 아래를 클릭...
[CODE type="java"]/** Activity소스코드를 보면, 타입이 HashMap<String, Object>이고, null 을 리턴하고 있다. 유지해야할 데이터가 한개라면 그 Object를 바로 리턴해도 된다. */ @Override public Object onRetainNonConfigurationInstance() { [tab]HashMap<String, Object> map = new HashMap<String, Object>(); [tab]map.put("worker", worker); [tab]map.put("var1", var1); [tab]map.put("var2", var2); [tab]return map; } }
/** onCreate의 적당한 부분에 이전 데이터를 복원하는 코드를 넣어준다. 여기에서는 restore() 를 따로 정의했다. */ @Override public void onCreate(Bundle savedInstanceState) { [tab]super.onCreate(savedInstanceState); [tab]... [tab]... [tab]restore(); [tab]... [tab]... }
/** 이전 데이터를 복원한다 */ @SuppressWarnings("unchecked") private void restore() { [tab]Object o = getLastNonConfigurationInstance(); [tab]if(o!=null){ [tab][tab]//Map형태로 리턴했기때문에 casting 해서 사용한다. [tab][tab]HashMap<String, Object>map = (HashMap<String, Object>) o; [tab][tab]this.worker = (Thread) map.get("worker"); [tab][tab]this.var1 = (String) map.get("var1"); [tab][tab]this.var2 = (String) map.get("var2"); [tab]} }[/CODE]
화면이 회전되거나 종료가 될때, onDestroy()가 호출되는데, 다음과 같이 구분해서 종료될때의 처리를 해 줄 수 있다. [CODE type="java"]@Override protected void onDestroy() { [tab]Log.d(tag, "onDestroy" + " isFinishing : " +isFinishing()); [tab]if(isFinishing()){ [tab][tab]//isFinishing()은 진짜로 프로그램이 종료될때는 true 값이다. [tab][tab]// 회전할때는 당연히 false [tab][tab]worker.interrupt(); [tab][tab]worker=null; [tab]} [tab]super.onDestroy(); }[/CODE]