라벨이 activity인 게시물 표시

Android Activity 의 lifecycle

이미지
Activity 의 상태에 대한 이해하기 쉬운 그림이다. (구글 이미지 검색으로 퍼왔음) Activity의 상태는 Foreground, Background, 그리고 일부분만보이는 Foreground 상태 3가지가 있다. Foregorund 상태 는 onStart() 이후부터 onStop() 사이이다. 이중 onResume()과 onPause() 사의 상태가 실제로 사용자의 입력을 받을수 있는 Foreground상태이고, onStart()이후와 onStop()이전은 일부분만보이는Foreground상태 (실제로 일부분이 보이거나, 보이지 않을수 있음. 非foreground 상태라고 함)이다. 경고를 표시할때 등, 다이얼로그 박스가 화면에 뿌려지면 非Foreground상태이다. Background상태 는 화면에 보이지 않는다. 보통 onCreate()에서 보통 자원 획득과 초기화를 수행하고, onDestroy()에서 자원을 정리/반납한다. 그래서, 앱을 실행할때 화면에 바로 뜨지 않거나, 종료후에도 실행되는 경우를 볼 수 있다. Activity의 state가 바뀔때마다 해당 메소드를 override 함으로써, 상태변화때 적절한 행동을 할수 있다. 보통 onResume()을 override할때 화면을 다시 그려주고 , pause상태에서는 메모리가 모자랄경우 해당 앱을 죽어버리므로 onPause() 메소드에 상태를 저장하는 코드를 작성한다.

Intent

안드로이드 개발시 Intent는 영어 뜻으로는 "목적","계획" 이다. 아니 "~을 할려고 하는" 이라고 생각하는게 더 쉬울것 같다. 단순 호출은 startActivity(new Intent(this, EditContent.class)); 하면 EditContent activity 를 호출할 수 있다. (현재 activity 스택의 위에 쌓인다) EditContent에서는 finish(); 를 호출함으로써 activity를 끝내고 이전 스택의 내용(이전 activity)이 foreground로 올라온다.

Intent Exception

2일째. startActivity(new Intent(this, EditContent.class)); 계속 exception이 난다. 먼저 default.properties 파일을 열어봤다. target 이 android-8 로 되어있다. 2.2 는 api level 이 8 이므로 정상으로 보인다. 혹시나 해서 android-7로 고치고 layout의 xml을 다 지우고 다시 만들었다. 실행해보니 emulator가 서버린다. 다시 8로 고치고 결국 구글링... reference를 찾아보니 startActivity 메소드는 ActivityNotFoundException 을 발생시켜서 일단 catch해주고, Exception 도 catch 해주었다. 아무생각없이 e.printStackTrace(); 했더니 아무것도 안나온다. ㅋ 대신에 Log.d("myTag", e.getMessage() ); 를 넣어주고 android.util.Log 패키지를 import 해주었다. elipse에서 perspective 를 DDMS로 바꾸고, log창을 보니 explict activity class를 찾을수 없다고 나온다. Unable to find explicit activity class {org.alwaysn00b.finance/org.alwaysn00b.finance.EditContent}; have you declared this activity in your AndroidManifest.xml? 이런.. AndroidManifest.xml에서 Activity를 추가해주어야한다. 해보니.. 잘된다. ㅡㅡ; 책하나 제대로 된거 한번 봐야겠다.