본문 바로가기

Development/Android

(21)
Widget Life Cycle. 안드로이드 액티비티 라이프사이클 만큼 중요한 위젯 라이프사이클이다. 일반 액티비티와 위젯의 라이프사이클은 개념이 좀 틀리다. 일반 액티비티를 사용하는 어플과 위젯 어플은 완전히 다른 방법으로 만들어진다. 먼저 라이프사이클의 순서를 보면, widget 정의 -> widget instance 생성 -> onUpdate -> 바탕화면의 widget view 상에서의 사용자의 터치에 반응 -> 바탕화면에서 widget instance 제거 -> widget package 제거 1. widget 정의. - AppWidgetProvider 를 상속 구현하는 java class 와 widget 의 layout view 가 필요하다. - manifest 에 정의하고 /res/xml 디렉토리 밑에 provider.xml..
특별한 갤럭시S. 그다지 좋은 뜻은 아니고.. 안드로이드어플 개발하면서 먼저 애뮬레이터부터 모토로이, 갤럭시A, 갤럭시S, 그외 기타 등등의 디바이스 순서로 테스트 하는데 항상 갤럭시S가 문제를 일으킨다. 같은 갤럭시S중에서도 어떤 디바이스는 괜찮은데 다른 디바이스는 오류를 뱉어내는 등 종잡을 수 없을때가 왕왕 있다. 분명히 안드로이드 API 를 따라서 만들면 잘 돌아가야 하는데 그게 아니다. 피쳐폰 어플을 만드는 기분. 아직까지 내가 담당한 어플은 다행히 그런일이 없지만 옆의 김모대리는 장난아니다. 항상 야근이다. 일반 어플에서도 그런 현상이 일어나지만 위젯프로그램에서의 빈도가 높은것 같다. 그리고 단지 안드로이드 API 의 문제라기 보다는 스피커, 볼륨 등등 주로 하드웨어와 밀접한 관계가 있고 그쪽 기능들을 많이 사용..
Android Life Cycle 다른 그림. 아무리 강조해도 지나치치 않은 안드로이드 라이프사이클. 액티비티의 전체 흐름을 파악하고 있어야 한다. 예를 들어, 뉴스 목록을 보여주는 화면이 A, 목록에서 하나를 골라서 터치하면 상세뉴스를 보여주는 화면을 B 라고 한다면 사용자가 뉴스 목록을 본다는 것은 A 가 onCreate -> onStart -> onResume 의 단계를 거쳐서 활성화 되어 있는 상태이다. 이때 뉴스 하나를 터치하면 A 는 B 화면 뒷쪽으로 넘어가면서 포커스를 잃게 된다. A 의 상태는 onPause -> onStop 의 상태로 바뀌며, B 의 상태는 onCreate -> onStart -> onRusume 의 상태를 거쳐서 사용자에게 상세정보를 보여주고 있다. 사용자가 뉴스를 다 읽고 다시 목록으로 돌아가는 버튼(finish)..
Widget 에서 onReceive 과 onUpdate 메소드의 차이. 옆에 김대리가 구현하는 도중에 onReceive 과 onUpdate 두군데 모두 Service 를 호출하는 로직을 넣어서 프로그램이 로딩되면서 Service 가 두 번 호출되는 문제가 있다고 도움을 요청한다. 그래서 그럼 둘중에서 한군데는 빼면 되지 않냐고 물어보니 그렇게 하면 바탕화면의 위젯에서 터치를 해도 동작하지 않는 오류가 있다고.. 소스를 보니 바탕화면의 위젯에서 버튼을 터치하면 중앙부분의 숫자가 바뀌는 로직이 Service 에 들어가 있다. 그리고 그 Service 를 manifest 에 정의해 놓았다. 위젯은 태생적으로 Service 를 기본으로 하고 있지만 현재 개발하고 있는 위젯 프로그램은 Service 기능을 사용하지 않는다. 있다면 하루에 한번 기본 그림을 랜덤으로 바꿔주는 정도. A..
Android Activity Life Cycle. 안드로이드 개발에 있어서 액티비티의 라이프사이클을 이해하는 것이 아주 중요하다. 모든 액티비티들은 LIFO 의 구조를 가지는 액티비티 스택에서 움직인다. 새로운 액티비티가 시작되면 현재의 화면이 이 스택의 맨 위로 올라온다. 사용자가 뒤로가기 버튼을 터치하거나 현재의 화면이 종료될 경우 바로 밑에 있는 액티비티가 위로 올라와서 활성 상태가 된다. 액티비티들은 아래의 상태에 따라서 스택에 들어갔다가 나간다. 활성(Activity) : 액티빈티가 맨 위에 있으며 화면에 보이고 포커스를 가지며 사용자의 입력을 받는다. 일시중지(Paused) : 화면에 보일수는 있지만 포커스를 가지지 않는다. 사용자의 입력 이벤트를 받지 않는다. 중지(Stopped) : 액티비티가 화면에 보이지 않을 경우 '중지' 된다. 모든..
리스트 출력하고 그 중에서 원하는 하나의 정보를 가져오기. 뉴스 기사 목록을 출력하고 그 중에서 원하는 하나를 터치해서 상세 내용을 읽는 기능을 구현한다고 가정하면.. 리스트에서 cursor(where 구문 포함.)를 생성해서 데이터를 가져온 다음 화면에 출력한다. 이때 position 은 자동으로 생성된다. (이때 리스트를 출력한 class 는 ListActivity 를 extends 해야 한다.) 리스트에서 하나를 터치해서 상세내용을 보고 싶다면 position 값을 intent 로 넘겨 준다. 상세 내용을 출력할 view class 에서 position 값을 받아서 위와 똑같은 cursor 를 생성한 뒤 값을 찾아 온다. position 값은 고유하기 때문에 position 값만 알수 있다면 테이블에서 해당 데이터를 가져올 수 있다. 예를 들어 기사가 10..
Android 에서 Thread 생성하고 사용하기. 안드로이드 디바이스에서 시간이 많이 걸리는 작업을 할때 일반적으로 thread 로 실행한다. 그런데 thread 를 하나만 만들어 놓고 실행한다면 그 thread 가 끝날때까지는 아무런 작업도 하지 못하고 기다려야 한다. 만약 빨리 끝나지 않는 작업이라면 그동안 전화기를 사용할 수 없다. 이렇게 UI 자원을 여러 thread 가 접근해서 사용하기 위한 몇가지 방법이 있는데 그중에서 handler 를 살펴 보자면. 1. thread 를 정의한 뒤 2. handler 를 선언해 놓고 3. 그 handler 에 thread 를 등록하고 4. 필요한 곳에서 sendMessage 로 호출하는 방법이다. ............. public static final int THREAD_NEWS_VIEW = 198; ..
서버에서 이미지 로딩하기. Loading images from a remote serverThis tutorial demonstrates how to load a remote image into your application and bind this image to an ImageView object. HttpURLConnection is used to download the image data and BitmapFactory is used to produce the bitmap which will be used as ImageView resource. Here is the Java code: import java.io.IOException; import java.io.InputStream; import java.net.HttpU..