본문 바로가기

6. With IT/6.1 Android

UI와 Handler 출처 : http://kyleslab.tistory.com/41안드로이드는 스윙과 마찬가지로 싱글 쓰레드 GUI 모델이 적용되어 있다. 즉 UI를 그리거나 갱신하는 쓰레드는 하나뿐이라는 것이다. 그 쓰레드는 바로 안드로이드의 주요 컴포넌트들이 실행되는 "main" 쓰레드이다. 모든 UI 관련 코드는 main 쓰레드에서 실행된다. 스윙에서 응답없음(unresponsive) 현상을 막기 위해 백그라운드에서 돌아가는 worker 쓰레드를 만든 것처럼, 안드로이드에서도 오래 걸리는 작업은 UI 쓰레드(= main 쓰레드)에서 처리하지 말고 별도의 쓰레드를 만들어 처리해야 한다. 그렇지 않으면 화면을 갱신하고자 하는 모든 코드는 block 당하여 ANR이 발생할 것이다. 오래 걸리는 작업에는 무엇이 있나? - 파.. 더보기
FragmentPagerAdapter, FragmentStatePagerAdapter의 사용 Fragment와 VIewPager를 사용하다 헛갈리는 것이 있어 포스팅한다......ㅡㅡ 참고:http://www.truiton.com/2013/05/android-fragmentstatepageradapter-example/ [dynamic한 fragment를 쓸 때에는 FragmentStatePagerAdapter] fragment_pager.xml MainActivity package com.truiton.fragmentstatepageradapter; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v.. 더보기
GCM 푸시서버연동 설정 - Server 지난 시간에 이어, 이번에는 Server 설정을 해보자!! 1. 서버 구현시, 추가로 필요한 라이브러리들 2. 프로젝트 생성 후 위 라이브러리들을 추가 3. 소스코드 추가 및 수정 public class Main { public static void main(String[] args) { // 프로젝트 서버 API key 입력 Sender sender = new Sender("프로젝트 서버 API key 입력"); // GCM으로부터 발급받은 단말기 RegID 입력. String regId = " GCM으로부터 발급받은 단말기 RegID 입력."; Message message = new Message.Builder().addData("msg", "push notify") .build(); List lis.. 더보기
GCM 푸시서버연동 설정 - Client 참고 : http://blog.daum.net/_blog/BlogTypeView.do?blogid=0qCVX&articleno=11 작성시기 : 2015.04.10[간략소개] 출처 : http://musasin84.blog.me/60212095039 GCM의 그림 Google에서 제공하는 메시지 발송 서비스이다. Google Cloud Messaging 의 약어로, 기존에는 C2DM이었으나 C2DM 서비스를 종료하고 GCM으로 바꾸었다. 이 서비스를 이용하기 위해서는 ANDROID Froyo (API Lev 8) 이상이 되어야 한다. 메시지는 최대 4KB 크기로 보낼 수 있으며, 이 서비스를 통해 카카오톡, 채팅, 알림 등의 서비스 구현이 가능하다. 100%의 성공률 수신은 장담할 수 없지만 과거 C2D.. 더보기
ScalableLayout 디바이스 크기와 레이아웃에 상관없이 일정한 크기를 유지시키기 위해 사용되는 라이브러리 com.ssomai.android.scalablelayout.ScalableLayout[출처 : https://github.com/ssomai/ScalableLayout/blob/master/README_ko.md]단 한번의 코딩으로 태블릿을 포함한 모든 화면에서 정확한 UI를 표현하고 싶다면! ScalableLayout은 화면의 크기가 매우 다양한 안드로이드 폰과 태블릿 환경에서 일관성 있는 UI를 표현하기 위한 방법 중의 하나입니다. ScalableLayout은 android에서 widget을 감싸는 용도로 쓰이는 FrameLayout 이나 LinearLayout 대신 이용될 수 있는 Layout 입니다. UI를 구.. 더보기
EventBus기법 http://greenrobot.github.io/EventBus/ Activity와 Activity, 혹은 Activity와 Fragment간 데이터 교환시 좀더 심플하고 안정적(?)으로 처리할 수 있게 많들어 놓은 '라이브러리' *간단 사용법1. Define an event public class MyEvent {}2. Register subscriber EventBus.getDefault().register(this);3. Post an event EventBus.getDefault().post(event);4. Receive the event public void onEvent(MyEvent event); [Github] https://github.com/greenrobot/EventBus [Ex.. 더보기
Meterial Design Example 역시 안드로이드는 거지같다.....뭐 한방에 되는게 없냐....삽질하다 포스팅해둔다. 0. [Android SDK Manager] open -> Extras에 Android Support Repository(v11) / Android Support Library(v21.0.3) Update1. 다운로드 소스 : https://github.com/kanytu/android-material-drawer-template2. 소스 및 appcompat-v7 import===============================================================================appcompat-v7의 Build Target을 최신(5.0.1)로 설정 및 project.propert.. 더보기
안드로이드 Affinity 출처 : http://blog.naver.com/dolking1234?Redirect=Log&logNo=70139143283 안드로이드는 액티비티 관리를 스택의 형태로 한다. 기본적으로 먼저 호출된 액티비티는 나중 호출된 액티비티가 종료되지 않으면 종료가 될 수 없다. 따라서 이런 형태로만 액티비티를 관리해야 한다면 상당히 불편하고, 비효율적이 될수 밖에 없다. 안드로이드는 이러한 문제를 지원하기 위해 FLAG_ACTIVITY라는 속상값을 지원한다. 이 속성을 상황에 맞게 잘 활용한다면, 액티비티 관리가 좀더 효율적으로 이루어질 수 있다. 이 속성 중 몇가지를 살펴보자. 1. FLAG_ACTIVITY_SINGLE_TOP 이전 포스트에서도 나왔던 속성 값이다. 이 속성은 foreground 상태에 액티비티.. 더보기
안드로이드 어플리케이션 기초적인 내용들 출처 : http://wikiware-textcube.blogspot.kr/2009/12/4-%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%96%B4%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98-%EA%B8%B0%EC%B4%88.html 4. 안드로이드 어플리케이션 기초4.1 안드로이드 아키텍처 (1) 안드로이드 어플리케이션의 특징 안드로이드 어플리케이션은 다음과 같은 특징을 가지고 있습니다. 경계가 없는 어플리케이션 : 어플리케이션은 표준 API(Application Programming Interface)를 통해 핵심(core) 모바일 기능에 접근 가능합니다. 원하는 경우 어플리케이션은 자신의 기능을 다른 어플리케이션에게 .. 더보기
apk만들기 1. Android Tools -> Export Signed Application Package... 2. 프로젝트 이름(보통 프로젝트를 클릭해서 들어온경우 자동으로 생성됨) 3. 키 이름과 비번지정(잘 외우고있기) 4. Alias : 프로젝트명 ... Validity:apk서명유효기간(최대60년) First and Last Name:작성자이름 5. .apk가 저장될 위치 지정 6. Finish 더보기
안드로이드 위치정보찾기 안드로이드에서 위치정보를 출력하는 방법이다. ===================================================================================================================public class GPS { private static final String TAG = "GPS "; private Context mContext = null; private LocationManager mLocationManager = null; public double dbLat, dbLng; public GPS(Context context){ this.mContext = context; if(this.mContext != null){// 1. L.. 더보기
안드로이드 종합 http://modian.tistory.com/entry/Android-Basic>Android AnatomyLinux KernelAndroid는 Linux Kernel을 기반으로 하고 있다.  왜 Linux System이 아닌 Kernel인가?어찌보면 당연하다. Mobile Device 상에서 full linux는 필요없다.  하지만 Android를 넷북이나 UMPC 등으로 영역을 확장한다면 좀 다른 얘기가 될지도 모른다Android is not LinuxAndroid는 Linux Kernel을 기반으로 하는 Mobile Platform이라고 정의하길 선호한다.Native windowing system, glibc support(gnu c library), 표준 linux utilities 등을 포함하.. 더보기
이클립스 플러그인(svn)설치 이클립스에서 svn설치 Help -> Eclipse Market Place 에서 'svn'으로 검색 후 svn설치 (단, 64bit로 설치되어 있으면 Checkout받을 때, JavaHL에러가 날 것임. 이것은 subclipse를 사용하기위한 자바 네이티브 라이브러리로 추정. 그리하여 에러 메시지가 난 곳의 페이지에 나와있는 주소 혹은 http://www.sliksvn.com/en/download 을 클릭하여 JavaHL을 따로 다운 받으면 됨.) 더보기
파일전송(웹 서버 : 아파치서버) 아......'무'에서 '유'를 창조하려니 참 쉽지 않네.... 이번에는 웹서버상에 파일을 전송하는 내용을 적어놓아야겠다. 원래 의도는 asp상에서 파일을 업로드 하려 했건만, 자료가 많이 있지가 않다.....ㅡㅡ;;; 그래서 부랴부랴 컴에 톰캣을 깔고 웹서버로 안드로이드 어플상에서 파일을 전송하는 포스팅을 한다. ===================================================================================================================1. 먼저 톰캣 서버 설치부분: 알아서들 하도록. 포스팅 한 곳이 무지하게 많다. 2. 톰캣을 설치하고나면 특정 파일(*.jsp)을 기본 페이지로 설정하고 쓸 것이다. 그 내용이다. [@주의.. 더보기
파일전송(ftp) 자바는 ftp관련 API정보가 없다. 그래서 인터넷에서 구글링하여 찾아야 한다. 프로젝트하는 도중, ftp 혹은 http를 이용하여 서버에 자료를 업로드하는 일이 생겼다. 그래서 따로 잊어버리지 않게 포스팅을 해둔다. 1. 해당 부분을 구현하기 위해서는 ftp관련 라이브러리를 외부에서 추가해주어야 한다.(첨부파일 참조)이 때, 해당 프로젝트의 Properties로 들어가 Java Build Path안에 Order and Export부분에서 추가한 라이브러리를 따로 체크해 주어야 한다. 2. 구현시, HoneyComb 버전 부터는 UI Thread내에 파일 전송, 혹은 네트워크 전송부분을 사용하게 되면StrictMode error가 뜰 것이다. 이는 파일과 네트워크 전송시 시간이 delay되는 현상때문에 .. 더보기
구글 지도 띄우기 출처 : http://www.androidpub.com/2398318 1. Google Map Android V2? 하나. SupportMapFragment : 일단 가장 중요한 것은 일반적인 View가 아닌 Fragment로 변경된 점인데요. 다양한 화면 구성을 위해 Fragment를 선보이면서 이에 맞춰 기존의 MapView(이하 V1)에서 SupportMapFragment(이하 V2)로 클래스가 변경이 되었습니다. 둘. APIKey 관리그동안 V1을 사용 할 때는 각 PC에서 디버그용 Apikey 를 가지고 있어야 해서. PC를 옮겨서 작업할 때는 V1에 들어갈 Apikey를 계속 바꿔줘야 하는 번거로움이 있었습니다. 하지만 V2에선 API Console을 통해 키를 발급받아 좀더 효율적인 APIk.. 더보기
sdcard안의 파일 내용 얻기 package com.android.FileList; import java.io.File; import java.io.FileFilter; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.ListActivity; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.Toas.. 더보기
Android 아키첵쳐 더보기
android8 - ApiDemo(OpenGL) 출처 : http://yonomi.tistory.com/112 Android 2.2 ApiDemo에는 OpenGL ES 2.0을 이용하여 Textured Triangle을 회전시키는 예제가 들어있다. 그냥 막연하게 OpenGL ES 1.1을 가지고 뭔가를 해 보려고 했었는데, GLSurfaceView.Renderer interface method 들의 argument가 GL10으로 되어 있어, 그걸 GL11로 casting 해서 사용해 보려고도 했었는데 (당연히) 실패했다(하하^^;). 그래서, "아... OpenGL ES 2.0은 커녕 OpenGL ES 1.1도 사용하기 어렵구나..." 라고만 생각하고 있었는데, 바보 같은 생각 이었다. (역시 사람은 모르면 찾아보고 물어봐야 한다! -_-;) GLSu.. 더보기
GLSurfaceView기초 출처 : http://android15.tistory.com/m/post/view/id/144 GLSurfaceView는 OpenGL ES 애플리케이션을 더 쉽게 작성할 수 있도록 합니다. GLSurfaceView는 OpenGL ES를 렌더링의 일부 또는 전체에 사용하는 애플리케이션을 구축하는 훌륭한 기반입니다. 2D 또는 3D 액션 게임이나 구글 맵스 스트리트뷰아 같은 2D 또는 3D 데이터 비주얼라이제이션 애플리케이션이 후보가 될 수 있습니다. 가장 간단한 GLSurfaceView 애플리케이션 view plaincopy to clipboardprint? package com.example.android.apis.graphics; import javax.microedition.khronos.egl.EG.. 더보기
Android - Dalvik VM & Core Lib 출처 : http://blog.java2game.com/tag/%EB%8B%AC%EB%B9%85 지난 10회 자바 컨퍼런스에서 "Dolphin-4 Android Run-time (Dalvik VM & Core Lib) 분석"이란 주제로 안드로드이에 관한 세션을 들었습니다. 예전에 모바일 관련 어플리케이션을 개발한 경험이 있는 관계로 임베디드 환경에 상당히 많은 관심을 가지고 있었습니다. 지금은 오래된 일이지만, 아직도 임베디드 환경에서 개발하던 예전 시절을 생각하며, 임베디드 환경에 맞는 어플리케이션을 개발하고 싶은 꿈을 가지고 있었습니다. 마침 들풀이란 닉네임으로 유명하신 양정수님께서 자바 컨퍼런스에서 구글(Google) 안드로이드(Android)의 핵심이라고 볼 수 있는 "Dolphin-4 Andro.. 더보기
Android-Lifecycle 출처 : http://androidhuman.tistory.com 안드로이드는 모바일 기기에서 구동되는 것을 목적으로 하고 있기에 PC에서 구동되는 프로그램들에 비해 더 효율적인 메모리 관리가 필요합니다. 안드로이드 어플리케이션을 구성하는 구성요소 중 하나인 액티비티(Activity)도 효율적인 메모리 관리를 위해 액티비티가 생성되고 소멸되는 조건인 생애주기(Lifecycle)을 가지고 있습니다. 액티비티 뿐만 아니라 브로드캐스트 리시버(Broadcast Receiver), 서비스(Service)도 일정한 생애주기를 갖고 있지만, 가장 자주 쓰이는 구성요소인 액티비티의 생애주기부터 알아보도록 하겠습니다. 액티비티의 상태는 크게 활성(Active), 일시정지(Paused), 정지(Stopped) 이 3가지.. 더보기
Android-Runtime 안드로이드 런타임 안드로이드의 핵심 라이브러리core library는 Java 프로그래밍 언어의 핵심 라이브러리에서 사용가능한 대부분의 기능을 포함하고 있다. 모든 안드로이드 애플리케이션은 달빅Dalvik 가상 머신에 대한 자기 자신의 인스턴스를 가지고, 자신의 프로세스 내에서 실행된다. 달빅은 하나의 디바이스에서 다양한 가상머신이 효율적으로 실행될 수 있도록 만들어졌다. 달빅 가상머신은 최소 메모리를 사용footprint하도록 최적화된 달빅 실행executable 포맷(.dex)의 파일을 실행한다. 이 가상머신은 레지스터 기반이며, Java 언어 컴파일러에 의해 컴파일된 후, SDK에 포함되어 있는 “dx”라는 툴tool을 통해 .dex 포맷으로 변환된 클래스를 실행한다. 달빅 가상머신은 쓰레딩thre.. 더보기
Android-Event3 이벤트 핸들러(Event Handler) 이벤트 처리 이벤트(Event)라는것을 사용자의 입력이나 시스템 상황 변화에 따라 발생하는것! 안드로이드에서는 이벤트를 처리하는 다양한 방법이 존재한다. 각 방법별로 특성이 조금씩 다르고 여러가지 변형된 구조를 허락한다. 처리방법은 크게 콜백메서드 Override와 리스너 구현이라는 2가지 방법이 있다. 그리고 리스너를 구현하는 방법은 5가지 정도로 세분화 된다. 1. 콜백 메서드 재정의 콜백(Callback) : 특정 이벤트가 발생했을때 시스템에 의해 자동으로 호출되는 메서드 이벤트를 처리하는 가장 쉬운 방법으로 해당 클래스를 재정의해서 콜백 메서드를 작성하는것이다. 사용자가 화면을 터치할 때, 키를 누르거나 뗄 때, 트랙볼을 굴릴 때 호출되는 콜백 메서드들을 .. 더보기
Android-Event2 개략적인 이벤트 처리 과정 액티비티 생성시 액티비티의 윈도우를 WindowManagerService에 등록해둠 이벤트 발생시 네이티브 라이브러리(EventHub)를 통해 이벤트 읽음 이벤트 큐(KeyInputQueue)에 이벤트 쌓임 이벤트 디스패치 쓰레드(InputDispatcherThread)는 이벤트큐에서 이벤트를 꺼내어 WindowManagerService의 디스패치 메소드 호출 WindowManagerService는 등록된 애플리케이션의 윈도우에 이벤트를 전달 이벤트를 전달받은 윈도우는 하위 UI 컴포넌트 트리를 찾아가며 리스너 콜백함수 실행 이벤트 전달을 위한 준비 WindowManagerService는 system_server 프로세스에서 실행중인 서비스이다. WindowManagerServ.. 더보기
Android-Event 출처 : http://underclub.tistory.com UI 이벤트 처리 어플리케이션과 사용자의 상호작용에서 이벤트 처리를 위해서는, 사용자가 사용하는 특정 뷰 객체에 이벤트를 등록하는 일이 우선되어야 합니다. 뷰 또는 뷰 클래스에서 이벤트 처리를 위한 public 메소드 몇가지가 제공되는데요, 이 메소드는 액션이 발생할때 시스템에 의해 호출됩니다. 뷰가 터치되면 시스템은 onTouchEvent() 메소드가 그 객체에서 호출됩니다. 하지만 이벤트 처리를 위해 해당 클래스를 상속하여 메소드를 오버라이드 해야되는데, 단순히 이벤트 처리만을 위해 모든 뷰 클래스가 상속받아야되는 상황은 번거롭게 느껴집니다. 이런 문제점 때문에 '이벤트 리스너' 라는 인터페이스를 제공하여 이벤트 처리를 쉽게 할 수 있습니다.. 더보기
안드로이드란??플랫폼/프레임워크란? 안드로이드란?? -> 대표적으로 휴대폰을 동작할 수 있게, 사용할수 있게끔 만들어 놓은 플랫폼중 하나이다. 그럼 아이폰의 플랫폼 종류는 무엇일까????당연히 애플에서 만든 iOS일 것이다. Android Platfrom architecture Platform? 플랫폼이란 서비스, 응용소프트웨어, 컨텐트 등의 기반이 되는 환경을 의미한다. 예를 들어 윈도우 OS는 그 위에서 동작하는 오피스, 메신저, 미디어 플레이어 등의 응용소프트웨어의 기반이 된다. 즉 윈도우즈 OS는 다양한 응용소프트웨어의 플랫폼 역할을 한다. 사용자에게 직접적인 가치를 주는 것은 OS 위에서 동작하는 응용소프트웨어가 되겠지만, OS는 응용소프트웨어가 작성되고 동작할 수 있는 기반이 되며, OS 없이는 응용소프트웨어가 동작할 수 없게 .. 더보기