프로그래밍/안드로이드 156

안드로이드/Android AsyncTask 사용법

안드로이드 AsyncTask 사용법에 대해 알아 보겠습니다. 안드로이드에는 UI 를 총괄하는 메인Thread가 존재 한고 있는데요.([안드로이드/Android Android에서 Thread(쓰레드) 란 무엇 인가?]) 메인Thread 외에는 일반Thread들이 안드로이드 UI 화면을 처리할 수 없습니다. 그렇기 때문에 메인Thread와 일반Thread 를 잘 핸들링 해서 사용해야 하는데, 여간 번거로운 일이 아닙니다. 그렇기 때문에, Android 에서는 AsyncTask 라는 객체를 지원하는데요. AsyncTask는 UI 처리 및 Background 작업 등 을 하나의 클래스에서 작업 할 수 있게 지원해 줍니다. 쉽게말해 메인Thread와 일반Thread를 가지고 Handler를 사용하여 핸들링하지 않..

안드로이드 - listView 항목에 Audio Albumart(thumbnail)을 지연 없이 나타내기 LinkedHashMap과 SoftReference사용 [캐시 처리]

LinkedHashMap과 SoftReference사용 Cache처리를 하는 로직이다. 한번 디스크에서 읽은 bitmap을 키값에 대응하여 저장한다. 인터넷의 아래 소스를 퍼왔다. http://code.google.com/p/android-imagedownloader/source/browse/trunk/src/com/example/android/imagedownloader/ImageDownloader.java 구조는 LinkedHashMap을 사용한 HARD CASH와 SoftReference를 사용하여 메모리가 부족할때 GC의 대상이 될수 있도록 한 HashMap 2가지가 유기적으로 동작한다. private static final int HARD_CACHE_CAPACITY = 10; private fi..

안드로이드 - HashMap,HashTable,LinkedHashMap,ConcurrentHashMap

음...요새 자주 접하게 되는 Data Storage이다. 보통 형태로 put하고 get(key)를 통해 value를 가져온다. value에는 Bitmap, Class, Drawable....등등등을 넣을 수 있다. 현재까지 내가 파악한 MAP Interface에는 HashMap, HashTable, LinkedHashMap, ConcurrentHashMap 이다. 요요 세가지에 대해서 자세히 살펴보자^^ 1. HashMap VS HashTable 비동기화 VS 동기화 비동기화가 성능이 좋고, 동기화는 성능이 안좋다. 중요한 것은 HashMap 을 Multi Thread 환경에서 사용하면 안된다. 여러개의 Thread가 동시에 HashMap 을 건드려서 key, value 를 넣게 되면 문제가 발생 할 ..

안드로이드 - Android Handler 와 Timer(TimerTask) 를 활용한 Intro 화면 구성

안드로이드 화면구성을 할 때, 가장 먼저 구현해야하는 화면이 바로 Intro 화면 일 것 입니다. Intro 화면이란 현재 실행되는 어플의 첫 화면이 보여지는 화면을 말하는데요, 말 그대로 해당 어플의 성격과 컨셉을 대변해 주는 아주 중요한 화면 입니다. 이렇게 Intro 화면을 보여주고, 실제 Main 화면으로 이동할 경우, 보통의 경우 Handler에 postDelayed(Runnable r , long delayMillis) 란 메서드를 활용 하는데요. Handler를 사용한 방법 말고도 Timer와 TimerTask를 이용하여 화면을 이동 할 수 가 있습니다. 자 그럼 우선, Handler를 이용한 화면 전환 부터 확인해 볼까요? ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15..

안드로이드 - Bitmap OutOfMemoryError 해결책

메모리 부족. 안드로이드에서 OutOfMemoryError라 발생하는 가장 많은 경우는 비트맵 로딩때문이다. 안드로이드는 어플리케이션 프로세스별 메모리가 제한되어 있다.(16M, 24M, 32M 등) 문제는 위의 메모리 에러가 DDMS에서 가장 쉽게 확인할 수 있는 메모리 값인 VM Heap 사이즈와는 크게 상관없이 발생한다는 것이다. Bitmap을 로딩할 경우 VM 내의 힙메모리를 사용하는 게 아니라 VM 밖의 Native 힙메모리 영역을 사용한다고 한다. 그리고 BitmapFactory의 decode함수들은 메모리 Leak이 존재한다고 알려져 있다. 해결 방안 :: 1. 가용 메모리의 확인 - 아래 API들을 활용해서 Native Heap 값을 확인할 수 있다. Debug.getNativeHeapSi..

안드로이드 XmlPullParser 사용 예제

: 권한 필요 ( - androidmanifest 파일에 추가 필요 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 ///////////////////외부url연결시/////////////////// String data = editLoc.getText().toString(); //한글을 인코딩해서 인터넷으로 내보내기 data = URLEncoder.encode(data, "UTF-8"); String requ..

안드로이드 onConfigurationChanged 화면 방향 상태 알아보기

안드로이드 기능에 대해 아주 초보적이고 미흡하지만 하나씩 알아가는게 참 솔솔하다. 어려운 점이 있다면 알고나면 별것 아닌 내용인것들이 하나를 알아가는데 시간이 참 많이 소요된다는 점..ㅋㅋ 어떻게든 책을 보고 서핑해서 알아내서 해결하고 나면 나름 뿌듯한 느낌이 드니 다행이다. 저와 같은 초보 개발자들을 위해 올려 놓는만큼 많은 정보 함께 공유하면 좋겠습니다. * 필요성 - 가로모드, 세로모드 두가지 화면에 맞는 레이아웃을 제공해야 한다. - 시나리오상 각 기능에 맞는 화면 인터페이스를 제공하여 어플리케이션 실행할 수 있어야 한다. * 적용방법 - Manifest.xml 파일에 android.configChanges 속성 추가, 변화항목 지정 - Java 파일 Activity 내부에 onConfigurat..

android.os.NetworkOnMainThreadException 에러

android.os.NetworkOnMainThreadException 에러 이 예외는 네트워크 작업이 UI 스레드(메인 스레드)에서 동작하기 때문에 발생하며 안드로이드 3.0 이전까지는 발생하지 않던 예외이다. 안드로이드 3.0부터는 지연이 발생할 수 있는 네트워크 작업이 UI 스레드에 영향을 주는 것을 원천적으로 막고 있다. 그래서 안드로이드 3.0 이후 버전을 사용할 경우에는 네트워크 작업을 UI 스레드가 아닌 별도의 스레드(AsyncTask 등)에서 처리해야 한다. 이것이 정상적인 처리 방법이며 혹여 단순한 테스트를 하는 경우나 아주 부득이한 경우에는 다음과 같은 코드를 사용해서 이러한 정책을 우회할 수 있다. if(android.os.Build.VERSION.SDK_INT > 9) { Stric..

안드로이드 new OutputStreamWriter(http.getOutputStream(), "EUC-KR") 에서 에러 해결법

예제 코드 보면서 하고 있는데요 URL을 제가 APMsetup으로 구축한 서버로 바꾸면 에러는 안뜨는데 어플이 죽지도 않고 반응을 안하네요 로그 찍어보니깐 OutputStreamWriter outStream = new OutputStreamWriter(http.getOutputStream(), "EUC-KR"); 이부분에서 에러나는데 혹시 왜 그러는지 아시는분 있나요?? 전체코든느 package com.example.hello; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; ..

Http Post 방식으로 웹서버와 자료를 주고받는 예제

다음 프로그램은 http://korea-com.org/foxmann/lesson01.php 와 자료를 주고받는 예제이다. [주의 사항] 1. http://korea-com.org/foxmann/lesson01.php 는 실습을 위해 임시로 만든 페이지이므로 언제든지 내 맘대로 삭제해 버릴 수 있다. 2. 위의 사이트를 해킹하는 행위는 형사 처벌을 받게 되므로 주의해야 한다. 3. 해킹 시도시 접속자의 ip를 추적해서 사용자의 컴퓨터를 포맷해 버리는 악랄한(?) 프로텍트를 사용하고 있으므로 특히 주의한다. 실행 결과 : 페이지1로 전송하고 페이지2로 결과 받음 main.xml Manifest.xml에 다음과 같은 퍼미션을 줘야 한다. project package com.http_post; import ja..

반응형