안드로이드 개발 질문/답변
(글 수 45,052)
최근데 Application클래스를 이용해서 어플을 제작했었는데
해당 어플이 스레드를 돌리는거라 액티비티에서 Application의 참조를 받아
시작할때 스레드를 스타트 하는 형태였는데 백버튼을 눌러 완전 밖으로 나간뒤에
다시 실행하니까 스레드 실행중 예외가 발생하더군요 백버튼을 눌러 어플에서 완전히 이탈한
상태에서도 프로세스가 살아있다고 판단하여 마켓에서 프로세스관리하는 어플을 받아 실행해보니
프로세스가 죽지 않고 살아있더군요 가령 윈도우즈에서 X버튼을 눌러 프로그램을 종료하게되면
프로세스에서도 사라지는데 안드로이드에서는 보통 어플의 종료를 백버튼을 이용해서 하는데
이런형태라면 어플리케이션에서 따로 액티비티들에서 완전히 이탈하거나 따로 메뉴나 버튼을 이용해서
프로세스를 죽이는 코드가 없다면 휴대폰을 재부팅하거나 프로세스 관리툴을 이용하여 종료하지 않는한
계속 상주하게 되는걸까요? 그리고 이렇다면 어플을 제작하는 입장에서는 어떻게 만들어줘야 할까요?
해당 어플이 스레드를 돌리는거라 액티비티에서 Application의 참조를 받아
시작할때 스레드를 스타트 하는 형태였는데 백버튼을 눌러 완전 밖으로 나간뒤에
다시 실행하니까 스레드 실행중 예외가 발생하더군요 백버튼을 눌러 어플에서 완전히 이탈한
상태에서도 프로세스가 살아있다고 판단하여 마켓에서 프로세스관리하는 어플을 받아 실행해보니
프로세스가 죽지 않고 살아있더군요 가령 윈도우즈에서 X버튼을 눌러 프로그램을 종료하게되면
프로세스에서도 사라지는데 안드로이드에서는 보통 어플의 종료를 백버튼을 이용해서 하는데
이런형태라면 어플리케이션에서 따로 액티비티들에서 완전히 이탈하거나 따로 메뉴나 버튼을 이용해서
프로세스를 죽이는 코드가 없다면 휴대폰을 재부팅하거나 프로세스 관리툴을 이용하여 종료하지 않는한
계속 상주하게 되는걸까요? 그리고 이렇다면 어플을 제작하는 입장에서는 어떻게 만들어줘야 할까요?
2009.12.23 02:21:31
일단 생명주기 실험을 통해 액티비티는 백버튼으로 onDestroy()가 호출되는걸 확인했구요 홈버튼을 눌렀을경우 onStop()이 호출되면서 액티비티는 사라지지 않는군요
이렇다는것은 다른 프로세스의 접근이 필요하지 않은 백그라운드가 필요한 어플같은경우는 Application을 상속하는 클래스를 만든뒤에 여기서 작업할 일을 정해두고 Sevice를 대처할 수 있다는 이야기가 될 수 있을까요? 안드로이드 어플을 제작할때는 정말 다른 어떤것보다 생명주기에 의해 발생하는 일들에 대한 처리가 가장 어려운것 같습니다.
이렇다는것은 다른 프로세스의 접근이 필요하지 않은 백그라운드가 필요한 어플같은경우는 Application을 상속하는 클래스를 만든뒤에 여기서 작업할 일을 정해두고 Sevice를 대처할 수 있다는 이야기가 될 수 있을까요? 안드로이드 어플을 제작할때는 정말 다른 어떤것보다 생명주기에 의해 발생하는 일들에 대한 처리가 가장 어려운것 같습니다.
짧은 지식이지만 아는 선에서 답변드리겠습니다.
개발자가 직접 finish() 를 호출하지 않으면 액티비티는 백버튼을 누른다 해도 사라지지 않습니다. 특정 작업을 위해 메모리가 필요한 경우에 현재 메모리가 존재하는 프로세스 중 하나를 운영체제가 자체기준에 의한 우선순위에 의해서 제거하도록 되어 있어요.
또한 메모리에 올라가 있는 것과 같은 어플리케이션을 다시 실행한다면 새로운 프로세스를 만드는게 아니라 메모리에 올라가 있는 프로세스를 다시 불러서 사용합니다.
결론은 메모리에 올라가 있어도 크게 염려할 상황은 아니라는 겁니다~
그리고 쓰레드를 말씀해주셨는데 상황으로 보아 화면이 보이지 않게 될 때의 경우를 고려하지 않았기 때문에(쓰레드를 종료한다거나 하는 처리) 발생하는 에러로 예상되네요.
또한 메모리에서 확실히 제거하고 싶다면 화면이 보이지 않게 될때 발생되는 OnStop() 메소드를 재정의 하여 finish()를 호출해주시면 될 거에요