본문 바로가기

Development

(89)
컴파일러 오류 발생. 서버쪽은 IntelliJ 로 개발하고 클라이언트는 eclipse 로 개발하고 있다. maven 은 IntelliJ 에서 설정/사용하기가 편하고 안드로이드 layout 은 eclipse 가 사용하기 편하다는 간단한 이유때문이다. -_- 얼마전부터 서버쪽 소스를 컴파일 할때마다 컴파일러 오류가 발생하고 있다. JDK 버전을 바꿔주면 괜찮아지길래 1.5 1.6 으로 바꿔주면서 사용하고 있었는데 한동안 잠잠하다가 오늘 또 컴파일러 오류가 발생하길래 JDK 버전을 바꿔 주었는데오 여전히 오류를 뱉어내고 있다. 한참을 실랑이 하다가 재부팅을 해도 마찬가지. 노트북의 뭔가와 충돌을 하는지 뭔 이유인지 모르겠다. 서버쪽과 클라이언트쪽을 같이 컴파일해서 올려서 테스트를 해보고 오류가 없으면 모두 설치해서 테스트 해볼텐데..
Eclipse Helios 버전에서 Android 개발하면서 자동완성 기능이 너무 느릴때.. Helios 버전에서 Android 개발하면서 Android API 를 사용할때 자동완성 기능이 너무 느려서 짜증날때가 많다. 기존에 알고 있던 방법을 사용해봐도 여전히 같은 증상.. 그럴땐 JAX-WS Proposals 옵션을 체크해제하면 괜찮아진다.
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..