본문 바로가기

전체 글

안드로이드 캐쉬 (SparseArray) 자바에 익숙한 개발자라면, 해쉬맵을 캐시로 사용하고, 나름의 효과를 볼 수 있다.하지만 안드로이드에서는 SparseArray라는 클래스가 있어서 키가 Integer값일 때 해쉬맵보다 효율적으로 동작하도록 설계되어 있다.해쉬맵은 키값의 타입을 java.lang.Integer로 할당하는 반면, SparseArray는 키값의 타입을 기본 자료형인 Integer로 가진다. 그래서 해쉬맵을 사용하게 되면 키값을 위해 너무 많은 Integer 객체가 생성되지만 SparseArray는 그런 객체 생성을 피할 수 있다.안드로이드는 여러 타입의  sparse배열을 정의하고 있다.SparseArray ( Integer를 object애 매핑 ), SparseBooleanArray ( Integer를 boolean에 매핑 ).. 더보기
안드로이드 리소스 구분자 종류 출처:하라구님 블로그(http://kscho.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-res-%ED%99%95%EC%9E%A5-%EC%A0%81%EC%9A%A9-%EC%88%9C%EC%84%9C)아래의 순서로 정해짐한정자 종류값 설명  MCC와 MNCmcc310.. 모바일 국가코드, SIM 카드에 저장된 모바일 네트워크 카드 언어와 지역enen-rUS 언어코드 : http://ko.wikipedia.org/wiki/ISO_639 : Alpha-2한국(ko), 영어(en), 일본어(ja), 중국어(zh)국가코드 : http://geotags.com/iso3166/countries.html한국(ko), 영국(rGB), 미국(rUS), .. 더보기
custom IME에서 enter/done 이벤트 반응이 없을때. EditText에서 기본 구글 IME 는 Done/Enter키가 잘됐는데 Custom IME 를 설치한뒤 Done버튼이 먹지 않는 이슈가 있었다.로그를 보내 ActionID가 0(IME_ACTION_UNSPECIFIED)로 날라왔다구글링을 통해 꼼수로 다음과 같이 해결했다.ㅎㅎ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 Edtior.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { if(actionId == EditorInfo.IME_ACTION_DONE || event.g.. 더보기
큰이미지 로딩시 Out of Memory 해결 방법 런쳐 개발 중 단말기 해상도가 올라가 해상도 변경 작업을 하는데 기존엔 문제없던 부분에서 자꾸 Out of Memory를 발생하며 런처가 죽었다-_- 구글 써칭을 통해 BitmapFactory.Options 도 사용해보고 recycle() 함수도 사용해봤으나 이젠 XML 파일에서 큰싸이즈 이미지를 읽어오니까 또 Out of Memory -_- 과장님이 보시더니 manifest파일에 android:largeHeap="true" 넣고 해봐... 어? 안죽네? -_- 다시 구글 써칭을 해보니 아래와 같은 내용이 있었다.Device implementations with screens classified as medium- or low-density MUST configure Dalvik to allocate a.. 더보기
EditText에서 google keyoboard visible 상태일때 하드 Back Key 제어 에디트텍스트를 클릭시 배경을 불투명하게 조정하고 키보드가 같이 뜨게 구현했다.이때 하드웨어 Back Key를 누르면 에디트텍스트는 살아있고 불투명 배경을 원래대로 변경하고 키보드가 내려가도록 구현하는데 마켓에서 받은 키보드들은 해당 에디트텍스트에 OnKeyListener를 등록하면 리스너를 통해 처리가되었는데 기본 구글키보드일때만 위의 리스너를 타지않고 배경은 불투명인 상태로 키보드만 사라지는 문제가 있었다. Listener란 Listener는 다 검색해보고 적용해봤으나 아무리해도 해당 리스너에 접근 되지 않아 열심히 구글링 중 에디트 텍스트를 커스터마이징한뒤 onKeyPreIme 함수를 오버라이드 해서 사용하면 된다고 하여 이렇게 저렇게 수정하다 결국 수정했다 -_-; 우선 에디트텍스트를 생성하고 호출.. 더보기
Android Handler를 이용한 특정 로직 지연시키기. 팝업메뉴->진입->새로운팝업 과같은 시나리오에서 이전 팝업메뉴를 Invisible 시키려고단순하게 해당 View를 invisible 시키니 진입시 딜레이가 발생했다.과장님의 헬프로 안드로이드 handler를 통해 다음으로 넘어가기전에 먼저 처리하는 방법을 알게되었다.Activity 전역에 Handler를 등록하고 1 2 3 4 5 6 7 8 private Handler messageHandler = new Handler(){ @Override public void handleMessage(Message msg) { if(msg.what == 0){ //실행될 로직. } }; }; 위에 실행될 로직이 들어갈 곳에 아래와 같이 PostDelay함수를 써주면 된다. 1 2 3 4 5 6 messageHandl.. 더보기
originally registered here. Are you missing a call to unregisterReceiver()? 해결. 이슈 수정 중 유난히 한 Activity에서 자꾸 originally registered here. Are you missing a call to unregisterReceiver()? 에러를 토해내서 구글링 / 책을 찾아보니 BroadcastReceiver 를 등록만 하고 해제 시키지 않아 발생하는 문제였다.책에서 보니 BroadcastReceiver를 Activity가 실행하는동안만 동작할게 할라면 아래 메서드를 호출해주면 된다====================================================================================================Intent registerReceiver(BroadcastReceiver receiver, Int.. 더보기
SVN 트리충돌 해결법 SVN 폴더를 통채로 날렸더니 갑자기 트리충돌로 업데이트가 제대로 되지 않았다. 구글링을 통해 방법을 찾아보았으나 잘되지 않아 결국 폴더하나 만들어서 다시 체크아웃했다 ㅠ 나중에라도 필요할지 모르니 일단 블로그에 끄적여놔야겠다. 첫번째 충돌발생한 디렉토리를 다른곳으로 이동이동한 디렉토리안에 svn폴더 삭제해당 프로젝트 cleanup 해당 프로젝트 update이동한 디렉토리 다시 복사이후 디렉토리에서 commit 메뉴 수행. 두번째1. svn resolved 폴더 또는 파일명(충돌을 발생하는)2. svn update3. svn commit --message "commit" ("" 안쪽은 아무 문장이나 넣어주어도 됨) 참고 : http://svnbook.red-bean.com/en/1.0/ch03s05.ht.. 더보기