volatile이란 단어의 뜻은 "변덕스러운"이다. 다시 말하자면 "자주 변할 수 있다"로 생각할 수 있다. 프로그래밍 언어에서는 정의는 언어와 버전마다 다르지만, 대충은 "자주 변할 수 있는 놈이니 있는 그대로 잘 가져다써"정도로 생각을 하면 되겠다. 조금 더 엄밀히 정의를 하자면, (1) 특정 최적화에 주의해라, (2) 멀티 쓰레드 환경에서 주의해라, 정도의 의미를 준다고 보면 된다. Java에서는 어떤 의미를 가질까? volatile을 사용한 것과 하지 않은것의 차이는 뭘까? volatile의 버전마다의 차이는 뭘까? synchronization과 volatile의 차이는 뭘까? 이 의문들에 대해서 정리한 것은 다음과 같다. volatile을 사용하지 않은 변수: 마구 최적화가 될 수 있다. 재배치..
제목 그대로다. android SDK Manager에서 SDK Platform-Tools를 업데이트 받고 Eclipse로 들어갔더니 ADT를 업데이트 받으라고 해서 업데이트 받았다. 그런데 그다음부터 gen폴더, R.java를 지우면 자동으로 recreating안하고 에러만 난다. 모든 R을 가르키고 있는 코드는 에러메세지를 토해낸다. 181818 왜그런지 찾으러 구글을 1시간을 돌아다녔다. ㅠㅜ; 그런데 아래처럼 나랑 똑같은 케이스가 있더군.. ADT버전이 16인데 SDK Platform tools와 SDK Build-tools의 버전이 호환이 안되서 생긴문제다. 해결책은 SDK Manager로 다시 가서 업데이트를 받으면 된다.I had the same issue today after upgradin..
[번역]자바 Enum의 10가지 예제Posted on 2012/07/18작성자: bluepoet1004원본글 : http://javarevisited.blogspot.sg/2011/08/enum-in-java-example-tutorial.html자바의 Enumeration(Enum)은 JDK 1.5에 소개되었고, J2SE5에서 내가 가장 좋아하는특징 중 하나이다.타입처럼 Java Enum은 NEW,PARTIAL,FILL,FILL or CLOSED와 같은 주문의대표적인 상태의 예와같이 확실한 상황하에서 더욱 적합하다.Enumeration(Enum)은 원래 자바에서 이용하지 않았고, C나 C++같은 다른 언어에서사용했다.하지만 결국 자바는 깨닫게 되었고 enum keyword에 의해 JDK 5안에 Enum..
DP (DIP) dp (dip, density independent pixel) 은 안드로이드에서 여러 화면 크기를 서포트 해주기 위해서 만든 유닛이다.만약 많은 화면에서 내가 만든 레이아웃이 제대로 보이길 원한다면 dp를 써서 화면을 만드는 것이 좋다. 우선 주의할 것은 안드로이드는 160dpi를 기본으로 생각한다.이것은 (320 x 480) 스크린의 density를 나다내는 것이다. 그러므로 480 x 800 (240dpi)의 스크린을 dp로 나타낸다면 320 x 533 (480 / 1.5, 800 / 1.5) 이 된다.dp를 이용해서 레이아웃을 잡을때 이 수치를 꼭 기억하고 잡자!dp로 레이아웃을 잡을때 버튼을 4개 만들고 LinearLayout (horizontal)에 넣은뒤 width를 80dp..
Intent와 PendingIntent 이해하기 PendingIntent도 일종의 Intent라고 생각해도 된다. 그런데 Intent의 기본 개념은 특정 컴포넌트(Activity, Service, Broadcast Receiver, Content Provider)를 실행시키는 메시지라는 것이다. 역시 마찬가지로 PendingIntent도 Intent의 일종이므로 특정 컴포넌트를 실행시키는 기능을 한다는 것이다. 그런데 PendingIntent는 생성자가 없고 다음 세 개의 메소드들에 의해서 객체가 생성된다. getActivity(Context, int, Intent, int), getBroadcast(Context, int, Intent, int), getService(Context, int, Inten..
Remote Service 만들기 Remote Service 만들기.. 아! 머리 아프다. 일반적인 Local Service는 많이 짜봤는데, Remote Service는 안짜봤다. 여기서 말하는 Remote Service는 다른 APK에 있는 Service를 호출하여 쓰는 것이다. 이런게 가능한지도 몰랐다 ㅠㅜ; 우선 구현을 위해서 Remote Service를 만든다. 여기서 중요한것이 Service의 Intent-filter이다. 앞에서 말했다시피 다른 APK의 Service는 간단히 쓸수가 없다. 호출을 어떻게 할까? 그래서 나온방법이 action을 사용하는 것이다. 자세한 내용은 Remote Service를 호출하는 Caller소스에서 더 자세히 설명하겠다. package com.example.t..
안드로이드 소스를 빌드해서 nexus 7에 올리게 되면 문제가 생긴다. 설정->태블릿 정보를 보면 모델이름이 Full Android on Tilapia가 된다. 즉 설치된 App들이 단말이 Nexus 7인지 모르고 Full Android on Tilapia로 안다는 것이다. ㅠㅜ 실제로 올레마켓은 모델명, 브랜드가 틀리면 지원안하는 모델로 알고 실행이 안된다. 이것을 Nexus 7으로 바꾸려면 두가지 방법이 있다. build.prop 수정 설정->태블릿 정보도 build.prop에서 값을 읽어서 뿌려주는 것이다. 원래 read only영역이지만 루팅을 하면 수정이 가능하다. 아래와 같이 수정을 하고 리부팅을 한다. ro.product.model=Nexus 7 ro.product.brand=google d..
안녕하세요. 이번에 "키보드스위치" 앱(마켓에서 검색하심 나옵니다.)을 만들면서 얻게된 팁(?)입니다. 인터넷을 많이 검색해봤는데 이 방법이 잘 없었습니다. 안드로이드, 리눅스, 자바 다 처음이라.... 이거 알아내는게 좀 힘들었습니다.. 고수분들에게는 의미없을지 몰라도 저같은 초보에게는 정말 필요한 것 같아서 이렇게 올립니다. ** 루팅된 폰에서만 되는 방법입니다. ** 제가 "키보드스위치" 앱을 만들면서 InputMethodManager의 SetInputMethod를 쓸려고 했지만 레퍼런스 문서에 나와있듯이 현재 작동하고 있는 키보드앱의 token을 알아야만 동작한다는 것을 알았습니다. 좌절했죠.. 그런데 안드로이드 소스의 InputMethodManager 부분을 보니까 WRITE_SECURE_SET..