안드로이드 Camera.Parameter setPreviewFormat으로 들어오는 포맷을 바꾸려고 하는데...

setPreviewFormat(ImageFormat.NV21); 이거 밖에 안먹힌다....

 

ImageFormat.JPEG

ImageFormat.NV16

ImageFormat.NV21

ImageFormat.RGB_565

ImageFormat.UNKNOWN

ImageFormat.YUV_420_888

ImageFormat.YUV2

ImageFormat.YV12

 

이 정도인데 모바일 제조사나 api level에 조금씩 다른듯하다. 그래서 png파일 저장하는 코드가 쓸데없이 길어졋다.

그냥 YubImage로 받아서 byteArrayOutputStream에 넣어주고 Bitmap에 넣어 사용하는 방법을 택했다.

 

저장포맷에 따라 압축을 또 달리해주다 보니 찍는 속도가 오락가락한다. 더 고민해봐야 할거 같다.

Posted by duehd88
,

6월에 시작!

8월까진 안드로이드 블루투스 공부하며 세월아 네월아 보내다가 8월 말부터 본격적인시작!

 

주제는 LED_ID를 이용한 위치 인식 시스템이다.

글로 대충 설명하자면

MCU보드(Atmega 128)이 제어하는 LED들에 ID를 부여하고

모형 자동차가 움직이며 특정한 위치에 정지했을때 해당 LED_ID를 인식하여

클라이언트 모바일로 보내준다.

 

1. LEDID를 제어하는 MCU는 Atmega128 이다.

2. 모형자동차에서 LED를 인식하는 부분은 안드로이드 카메라이고

  모형 자동차의 모터는 안드로이드로 제어를 하는데 이를 가능하게 해주는게 ioio board이다.

3. 클라이언트에서는 모형자동차의 위치를 알수있는 맵을 그려주고 모형자동차의 위치를 제어한다.

4. 데이터는 블루투스를 통해 주고 받는다.

 

현재 내가 맡은 부분은 클라이언트 앱과 블루투스 통신 기능을 짜고 모형차의 앱 몸체를 짜기로 했다. 이번 졸업작품의 핵심인 LED_ID와는 좀 떨어져 있다. 하지만 내가 하는 부분이 서비스를 제공하는 측면에서 매우 중요하고 더군다나 다른 부분보다 혼자 해야할 것들이 엄청 많기 때문에 나쁘지 않다.

 

----------------------------------------------------------------------------------------------------------------------------------

2014.06.01 - 블루투스 공부 시작. 생각 보다 괜찮은 예제들이 없음

그래도 새로 짜진 않고 구글에서 제공해주는 예제 코드를 수정해서 작성

에러가 너무 많아 일단 manifest의 화면이 회전 할때 마다 onCreate를 다시 호출함을 방지

그 외에 블루투스 state관리, BlueTooth socket thread관리, Activity의 lifecycle관리, 최신 버전에서 쓰이지 않는 코드등 수정할게 많음

2014.06.15 - 시험이 남아 있지만 최신 버전에서 쓰이지 않는 코드를 수정하기로 했다. 별거 아니고 ActionBar부분 이다. 코드로 뭔가 custom하려는

흔적이 있다 생각해 보니 예전에 내가 수정하다 추가했던거 같기도... 안드로이드 UI는 마냥 코딩으로 처리하기 보다 res-xml파일쪽에서 처리를 최대한 해놓는 것이 좋은것 같다.

2014.07.02 - 본격적으로 졸작팀이 모이기 시작했다. 블루투스 뼈대 코드에서 버튼을 누르면 해당 커멘드 신호를 보내고 받는 에코서버 같은 기능을

집어넣어봄. 예전에 C소켓 서버도 짜보았고 자바 서버도 아주 간단하지만 짜본적이 있어서 별무리없이 쉽게 짯다. 안드로이드 블루투스 소켓 부분은 그냥 일반 소켓 코딩하는 것과 거의 같은 것 같다. 그런데 연결관리가 잘되지가 않는다. 6월 1일에 있던 문제를 아직 해결하지 않은 탓인것 같다.

2014.07.25 - lifecycle 관리 문제를 해결하고 state관리를 어느정도 해결함. 문제는 한앱에서 discovery와 scan부분을 같이 갖고 있는데 이 부분이

thread가 따로 돌아가게 되는데 이때 이 thread들이 꼬이는 문제를 보였다. 우린 mater(discovery)부분과 slave(scan)부분을 나누려 했기때문에 이 문제가 자연스럽게 해결됬다.

이 날 같이하시는 누나가 opencv를 어려워하셔서 같이 코드 분석 하는 식으로 진행해서 안드로이드 화면분할 코드, color detect 코드를 우리 필요에 맞게 수정했다. 또 LED제어를 맡으신 형이 Atmega를 제어하기 위한 AVR 코드와 LED cell을 구성할 기초 회로를 이용하여 짜고 계신다. 7월 동안 도움주신 두분이 정말 감사하다. 특히 회로부분은 정말 큰 도움이 되었던것 같다.

2014.08.XX - 이 한달간은 자재구매와 전시할 틀완성, 클라이언트 앱의 프로토 타입을 완성 했다. 아직 에코서버 처럼 짯다. 이는 값을 주고 받는 문제

가 없는지 확인하기 위해 계속 놔두었다. 이제 주고받을 데이터의 구성을 하면 된다. 그리고 모터를 맡으신 형과 함께 모터돌아가는 예제를 분석해 보았다. 그런데 무슨 문제인지 돌지를 않는다. 하드웨어의 문제라고 생각되어져서 구글링을 통해 모터드라이브 연결부를 빼서 다시 연결했다. 구글링만 하고 30분정도 자버렸는데 그 동안 형이 다 연결해놓으셨다. 한쪽 바퀴가 돌아감을 확인했다. 하나만 돌아간게 이상했다. 역시 다시와서 보니 안돌아감... 그래서 핀맵도 달리해보고 연결도 다시해보고 하는데 안돌아간다. 뭐가 문제인가...

2014.09.05 - 뷰에서 현재위치가 표시되고 다른 위치로 이동하기 위한 시나리오를 추가 했다. 원래 시나리오는 방향키로 차를 이동하는 것이고 추가

시나리오는 맵에서 도착지점을 클릭하면 거기까지 이동하는 시나리오이다. 이 부분을 slave가 되는 클라이언트 앱단에서 처리할지 master가 되는 앱에서 처리를 할지 정해야 하는데 아무래도 master는 카메라영상처리와 모터제어,블루투스 까지 굉장히 많은 일을하기 때문에 클라이언트단에서 처리하기로 결정. 무엇보다 처음 연결될때 뷰를 그리기 위한 맵정보를 받고 시작하기 때문에 이를 기반으로 길을 찾는 메서드를 짜면 문제가 없다. 그리고 방향키제어 command를 string으로 이어서 주고, 이를 가공해서 순차적으로 수행하는 식의 매커니즘으로 짜면 아무래도 길을 찾는 메서드 작성도 큰어려움은 없을 것 같다.

2014.09.12 - 12일인지 그 전인지는 잘 생각안나지만 차가 돌아가기 시작했다. 코드를 새로 열고 테스트하셨다는데 내가 해결한게 아니라서 뭐가 문제

인지 정확히는 모르지만 이 또한 thread관리 문제였던것 같다. 안드로이드가 앞으로 가라는 신호를 한번 보내주면 계속 그 커멘트에 해당하는 행동을 한다. 그리고 모형 자동차가 탱크같은 식의 바퀴라서 90도 회전을 위한 정교한 모터 움직임이 필요할거 같다.

2014.09.14 - 안드로이드 ioio보드를 제어하기 위한 test 코드를 라이브러리를 이용해 연결관리 메커니즘과 clean한 코드를 위해 바닥부터 짯다. 잘돌

아가야 할텐데... 15일에 test 해보아야겠다.

2014.09.15 - 테스트해보니 계속 죽는다. ioio board가 usb 악세사리라서 연결을 해야하기 때문에 Log값을 찍어볼 수 가 없다. 이를 대응할 만한 부

분을 넣기도 뭐하고 그래서 Create부분만 분석해보니 라이브러리에서 제공하는 인터페이스에서 할당이 안되었는데 쓰는 문제였다. NullPointerException 문제인데 라이브러리에서 제공하는 사용법에 맞게 사용하는데 에러가 나서 당황스럽다. 분명 이전에 다른 코드를 실행해야 하는것 같은데... 돌거같다.... 암튼 원인해결을 어떻게 하면 될지는 알겠지만 뭘로해결 할지를 아직 못찾았다.

2014.09.26 - 길찾기 코드를 완성했다. 기존에 나와있는 a*star같은 탐색알고리즘들은 너무 무겁다. 그리고 장애물도 없고, 탐색할 필요없이 가는 법

을 계산하기만 해서 알려주면 되기 때문에 그냥 맵에서 위치간의 x와y축의 차이를 이용해 이동경로를 string에 넣었다. 이제 보내주고 그에 맞춰 모터를 제어하는 것만 해결하면 된다.

Posted by duehd88
,

안드로이드에서 화면 회전시 Activity가 destroy되고 다시 create하는데 이때 onCreate 코드들이 다시 실행된다.

즉, destroy와 create를 직접 만지겠다는 설정을 해야한다.

이 설정은 AndroidManifestdml activity element부분에 property를 부여 해주어야 한다.

android:configChange="keyboardHidden|orientation|screenSize"

 

screenSize가 빠진 코드를 많이 보았다. 경우에 따라서 이 부분이 굉장히 중요한데 이를 넣지 않으면 onCreate를 수행하고 넣으면 안하는 차이가 있기 때문에 주의해야한다.

 

저 이벤트의 경우 직접 처리하는 부분이 onConfigurationChanged(Configuration newConfig)이다.

 

@Override
 public void onConfigurationChanged(Configuration newConfig){

// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);

}

Posted by duehd88
,

 Activity는 focus되었을 때 사용자와 상호작용을 할수있다.

즉 사용자가 앱을 실행하여 상호작용하고 싶다면 무조건 하나는 필요하다는 이야기이다.

없다면 앱을 설치해도 볼수가 없다.

 

 이 Activity는 기본적으로 네가지의 State를 가진다.

- foreground 상태에 있을(stack의 맨위에 있는) 경우를 active 또는 running이라 한다.

- activity가 focus(초점)을 잃었지만 화면에서 계속 볼 수 있는 경우 그것은 paused라 한다. 메모리의 상태가 최악의 경우일 때 시스템에 의해     강제종료 당할 수 있다.

- activity가 완전히 다른 activity에 의해 가려진 경우는 stopped 라 한다. 메모리가 다른 곳에서 필요한 경우가 있으면 시스템에 의해 강제 종료     당할수 있다.

- paused나 stopped상태일 때, 이를 시스템이 강제로 메모리에서 제거할 수 있습니다. 이 Activity가 사용자에게 다시 표시될 경우 previous state를 복구해낸다. 

 

그리고 Activity의 상태가 전이될 때 다음의 메서드들이 호출됨으로 인해 State가 알려지게 된다.

- void onCreate(Bundle saveInstanceState) : 모든 Activity는 Object가 처음 instance화 될때 초기 SetUp을 위해서 onCreate를 구현 해야 한다.

- void onStart()

- void onRestart()

- void onResume()

- void onPause()

- void onStop()

- void onDestroy()

그리고 이 메서드들은 사용사가 Override할 수 있다.

State diagram for an Android Activity Lifecycle.

출처 : http://developer.android.com/reference/android/app/Activity.html

 

이러한 Method들을 합쳐서 Activity의 전체 Lifecycle을 정의하게 된다.

그리고 이 Method들을 구현함으로써 모니터 가능한 3개의 NestedLoops가 존재하게 된다.

- Entire Lifetime : onCreate()의 최초 호출부터 onDestroy()까지 남아있는 모든 리소스 해제까지의 시간

- Visible Lifetime : onStart()를 호출하고 onStop()이 호출될 때 까지를 말한다. 이 시간 동안에는 Activity화면을 사용자가 볼 수 있고  필요한 리소스들을 유지할 수 있다.

- Foreground Lifetime : onResume()을 호출하고 onPause()가 호출될 때 까지를 말한다. 이 시간 동안에서 Activity는 사용자가 볼 수 있고  스크린의 맨앞에서 사용자와 상호작용을 하게된다. 이 Method의 코드들을 매우 가벼워야 좋다.

Posted by duehd88
,

parameter(파라미터)argument(아규먼트)  차이가 있다.

 

뜻을 보자면
형식 매개변수가 parameter(파라미터)이고

실제 전달인자가 argument(아규먼트)이다.

예를 들자면

int sumFunc(int a,int b){ 

... 

} 

에서의 함수가 구현될때 int a와 int b는 매개변수로 parameter(파라미터)라 하고,

실제로 저 함수가 실제 동작할때 넣어주는 의미있는 값

sumFunc(5,9);

의 경우 5와 9를 argument(아규먼트)라 한다.

Posted by duehd88
,

컴퓨터 메모리에서 데이터 저장순서? - 빅엔디안과 리틀엔디안

 

  바이트 오더링을 아십니까? 이는 "바이트단위로 순서를 세운다"라고 생각하시면 되는데요. 바이트 오더(Byte Order)하면 가장 먼저 떠오르는 두 가지가 빅 엔디안과 리틀 엔디안일 것 입니다. 많이 헷갈릴 수 있는 부분입니다. 프로그래밍을 하는 사람이라면 빅 엔디안과 리틀 엔디안 방식의 개념은 당연히 알아야할 요소라고 생각됩니다.

 

  빅 엔디안(Big-Endian)과 리틀 엔디안(Little-Endian)이라는 말은 조나단 스위프트의 걸리버 여행기에서 유래했습니다. 삶은 달걀은 둥근 쪽과 뾰족한 쪽이 있습니다. 둥근 쪽은 면적이 상대적으로 큰끝(big end)이고 뾰족한쪽은 면적이 작은끝(little end)입니다. 그리하여 소인국에선 둥근 쪽을 깨서 먹는 사람(Big Endian)과 뾰족한 쪽을 깨서 먹는 사람(Little Endian)으로 나누어 어느 쪽을 먼저 깨먹어야 하느냐에 대하여 대립을 벌이는데서 비롯 되었다고 합니다.

 

빅 엔디안 (Big-Endian)

- unix를 사용하는 RISC processor 계열에서 사용하는 Byte Ordering입니다.

- network protocol에서 표준으로 사용하는 Byte Ordering이기도 합니다.

- 메모리 시작 주소에 상위 바이트부터 기록합니다.

 

리틀 엔디안 (Little-Endian)

- intel계열의 processor에서 사용하는 바이트 오더링 입니다.

- 메모리 시작주소에 하위 바이트부터 기록합니다.

-------------------------------------------------------------------------------------------

우선 쉽게 설명하자면 87453489라는 정수가 있다고 칩시다. 이를 int형 4byte의 메모리에 저장할 때

* Big-Endian 저장방식 : 87 45 34 89

* Little-Endian 저장방식 : 89 34 45 87

이런 식으로 저장합니다.

 

  이렇게 87 45 34 89가 총 4byte로 1byte씩 순서에 따라 저장되기 때문에 빅-리틀 엔디안을 byte ordering이라 합니다. 바이트단위로 순서에 따르기때문이죠.

 그런데 Big은 원래의 수를 1byte씩 나눠 순서대로 저장했지만, little은 원래의 수를 1byte 단위로 나눠 거꾸로 저장했네요? 하지만 1byt단위 내에서는 순서가 그대로입니다. 이 부분이 중요합니다.

 

-------------------------------------------------------------------------------------------

    MSB와 LSB로 이해해보자!!!

 

  MSB (Most Significant Bit), LSB (Least Significant Bit) 참 어려워 보이는 말입니다. 하지만 그리 어렵지않습니다.  용어만 생겻을 뿐이지 위의 쉬운 설명에서 크게 벗어나지 않습니다. 그리고 메모리주소 값의 개념만 있다면 용어에 상관없이 이해하실 수 있습니다.

* MSB - Most Significanct Bit (가장 큰 비트 자릿수, 최상위비트)

* LSB - Least Significant Bit (가장 작은 비트 자릿수, 최하위비트)

입니다.

 

  맨위에서 설명하기 앞서 Big-Endian은 메모리 시작 주소에 상위 바이트부터 기록하고, Little-Endian은 메모리 시작주소에 하위 바이트부터 기록한다고 했습니다. 아래 그림을 봅시다.

12345678 이라는 숫자가 있습니다. 이 숫자의 MSB(최상위 비트)가 포함된 숫자는 1입니다. 물론론 최상위 비트가 1인것을 아닙니다. 하지만 최상위 bit가 속한 수는 1이란것을 알수있습니다. 그리고 최상위 bit가 속한 byte단위의 수는 12 입니다. 그럼 최하위 bit인 LSB가 포함된 수는 8입니다. 물론 최하위 bit가 포함된 byte단위의 수는 78 입니다.

 

  왜 최상위bit가 포함된 byte단위수라고 할까요? 복잡하게시리... 그 해답은 bit에 있습니다.

 

12345678을 한글자씩 끊어서 bit로 표현해봅시다.

 

0001 0010 0011 0100 0101 0110 0111 1000

  1    2    3     4    5    6    7     8

여기서 0가  MSB, 0LSB인것입니다. 그리고 byte단위로 끊는다면 12/34/56/78 이기 때문에 MSB, LSB가 포함된 byte단위수라는 표현을 사용했던 것입니다.

 

  이제 나머지는 위의 설명들을 종합해서 자신의 머릿속에서 정리하는것에 달렷습니다.

--------------------------------

 가끔 byte ordering, bit ordering에 대한 말들이 bit ordering은 왜 빅엔디안방식만 따르는가? 에 대해 생각하는데 1번 힌트는 bit ordering은 bit단위로 순서를 세운다. 2번 힌트 bit단위(2진수)로 거꾸로 세워서 다시 10진수로 고쳐보자.

 

그리고 무엇보다 엔디안(endian)이라는 말은 byte ordering에 대해서만 쓰이는것이지 bit order로는 생각하면안된다고 생각됩니다.

 

출처 - http://blog.naver.com/duehd88/20163866392

'Programing > programing note' 카테고리의 다른 글

CRUD는 무엇인가?  (0) 2015.12.06
ip에 대해서  (0) 2015.02.17
졸업작품 뒤죽박죽 개발일지  (0) 2014.10.04
parameter(파라미터)와 argument(아규먼트)  (0) 2014.06.29
Posted by duehd88
,

자바

1. 자바의 개발도구 JDK는 1995년 5월에 썬 마이크로시스템즈에서 처음 발표했다. 

2. 자바는 좁은 의미로 객체지향 프로그래밍언어이다. 

3. 넓은 의미로 서버와 클라이언트, 모바일, 스마트한 기기등 여러 하드웨어 플랫폼에서 운영될 수 있는 소프트웨어 가상 플랫폼이다.

특징

1. 단순하다.

- 프로그래머가 어려워 하는 포인터를 쓰지않는것이 가장 큰 특징중 하나

2. 객체지향 언어이다.

- 오로지 클래스단위로 객체지향 프로그램 개발해야 한다.

3. 시스템에 독립적이다.

- 한번 만들어진 자바 프로그램은 어느 플랫폼에서나 동일하게 실행된다.

4. 번역언어 이다.

- 실행시 인터프리터가 있다.

- 이게 참 독특한데 소스코드를 컴파일 하여 바이트코드라는 클래스파일을 만들고 JVM에서 인터프리터 식으로 읽어 실행한다.

----------------------------------------------------------------

자, 그럼 JDK는 무엇일까?

개발을 위한 도구와 자바실행환경(JRE)을 제공한다.

그러므로 JRE만 받으면 자바실행은 될지 몰라도

컴파일러인 javac과 기타 도구들이 없어 프로그램 개발이 불가능하다.

개발을 한다면 꼭 JDK를 받자!! 

 

 

  JAVA SE, JAVA EE, JAVA ME, JAVA FX, JAVA DB등등 여러가지가 많이 있는데 특화된 기능에 따라 제공해주는 기술이 있다. 예를 들면 JAVA ME 같은 경우 임베디드장치같이 메모리나 저장용량이 작아야하는 장치를 위한 기술을 제공한다. 하지만 결국 기본은 모두 JAVA SE로부터 시작한다.

Posted by duehd88
,

자동으로 import 하는 단축키

 - Eclipse는 Ctrl + Shift + o(영어키)

 - inteliJ 기반인 Android Studio에서는 Alt + Enter key

Posted by duehd88
,

AsyncTask

Programing/android 2014. 6. 29. 19:56

제대로 공부도 안하고 doInBackground와 onPostExecute만 이용하거나 thread만 구현해서 사용해왔다. 그런데 AsyncTask를 많이 접하게 되면서 제대로된 사용을 위해 작성해본다.

 

- Thread와 Handler를 모르더라도 이 기법을 사용할 수 있게끔 짜여져 있는 abstract class이다.

- 내부적으로 백그라운드 쓰레드를 생성한다.

- 필요할 때마다 UI에서 실행될 콜백메서드 호출이 가능하다.

 

▶ abstract class 이므로 generic parameter로 3가지 형태를 전달해 준다.

1. Params : 실행할 때 전달할 인수의 형태

2. Progress : 매 작업 단계마다 진행상태를 표기하는 형태

3. Result : 작업 결과로 리턴될 형태

 

▶ callback method

1. void onPreExecute() :

- doInBackground(Params) 호출 전에 먼저불린다.

- doInBackground(Params) 작업전에 초기화 처리, dialog같은 작업을 처리한다.

2. Result doInBackground(Params ...params) :

- 백그라운드 쓰레드에서 실행되기 때문에 연산이 오래걸리는 부분을 여기서 담당한다.

- execute(Params)메서드로 인자를 전달하는데 이 인자는 여러개가 전달이 가능하다.

- 여러개의 전달된 인자는 배열처럼 이용한다.

- 작업중에 publishProgress(Progress)로 이용해서 작업경과를 UI thread에 보고할 수 있다.

- 결과를 onPostExecute(Result result)의 인자로 반환한다.

3. void onPostExecute(Result result) :

- 이는 doInBackground(Params)가 호출된 다음 불린다.

- doInBackground작업의 결과를 이용한 UI 업데이트에 이용하기 좋다.

4. void onProgressUpdate(Progress ...values) :

- doInBackground에서 publishProgress(Progress)를 이용해 호출한다.

- 인자값에 따른 작업의 상태를 UI에 표시한다던가 이런 류의 작업을 할때 이용된다.

5. void onCancelled() :

- cancel메서드로 작업을 취소했을 경우 불리는 메서드이다.

- 자원의 반환같은 처리등을 하면 좋다.

 

▶ AsyncTask class method callback

1. AsyncTask<Params,Progress,Result> execute(Params... params) :

- execute를 호출하면 AsyncTask의 각 메서드가 순차적으로 호출되어 작업을 수행한다.

- 반환되는 AsyncTask객체는 메인 스레드에서 참조가 가능하며 다음 메서드들을 호출한다.

- 인자값을 넘겨주는데 형태만 같다면 여러개를 동시에 넘길 수 있다.(배열형태로 넘기는게 아님)

2. boolean cancel(boolean mayInterruptIfRunning) :

- 작업을 취소한다. onCancelled()메서드 호출한다.

- 작업 취소가 실패되는 경우가 있는데 이미 작업이 완료되었거나 이미 취소된 경우, thread safe하지 않은 경우이다.

- 작업이 시작되기전에 호출할 경우 취소를 성공한것으로 처리된다.

3. boolean isCancelled() :

- isCancelled 메서드는 정상 종료되지 않고 취소되었는지를 반환한다.

4. Result get([long timeout,TimeUnit unit]) :

- 작업이 완료되기까지 대기하며 작업결과를 돌려 받는다.

- 필요시 인자값을 전달해서 대기할 타임아웃값을 지정할 수 있다.

5. AsyncTask.Status getStatus() :

- 작업의 현재 상태를 조사

- 아직 시작하지 않은 상태이면 PENNING이 반환된다.

- 실행중인 경우에는 RUNNING이 반환된다.

- 작업이 완료된 경우에는 FINISHED가 반환된다.

 

주의 할 점은 Backgorund단에서 실행되는 메서드인 doInBackground(), publicProgress()에서는 UI에 접근하는 작업을 하면 안된다.

Posted by duehd88
,

Volley - Network & ImageLoading 라이브러리 ( google I/O 2013 )

 

 

특징

* requestQueue를 이용한 동시요청 처리

* 요청 우선순위 설정 가능 ( A요청이 B요청보다 먼저 응답을 받아야 할 경우 )

* 요청 취소 기능 ( adapter 같은 곳에서 scrolling 이 빠른경우 응답이 않왔을때는 취소가 필요하죠. )

* android 하위 버전(2.3)에서 존재하던 HttpURLConnection의 버그 해결

* NetworkImageView 제공

 

간단한사용법은 원본글 링크로 고고

원본글 링크 - http://hanburn.tistory.com/135

valley - https://android.googlesource.com/platform/frameworks/volley

샘플 - https://github.com/ogrebgr/android_volley_examples

'Programing > android' 카테고리의 다른 글

Activity Lifecycle  (0) 2014.07.06
AsyncTask  (0) 2014.06.29
이미지 Out Of Memory 문제 간단하게 해결하기  (0) 2014.06.28
Background Thread에서 UI 접근하기  (0) 2014.06.27
Bluetooth 개발 01. 기초  (0) 2014.06.25
Posted by duehd88
,