BaseAdapter 이란 무엇일까? 기존에 디바이스에 Content내용만 다르고 Layout이 동일한 View를 여러개 표현할 경우 ScrollView를 사용할 수 있었다. 그러나, 스크롤이 보이지 않을 자식 View까지 미리 그려두기 때문에 메모리 사용량이 증가하고, LinearLayout으로 무수한 View를 배치하게되면 시스템 성능을 저하시킬 수 있다. 이러한 부분을 해결하기 위해 나온 것이 Adapter View이다. 콘텐츠의 내용만 다르고, 동일한 Layout들이 수직으로 그룹을 구성한 리스트 현재 화면에 보이지 않는 자식 뷰를 미리 생성하지 않고 스크롤되어 보여야할 때 생성 유사한 성격의 콘텐츠를 리스트로 배치할 때 사용 위 그림에서 보듯이 ListView를 구성하고 해당 ListView에 ..
SQLite Database? 안드로이드에서 기본적으로 Database를 제공하는데 SQLite이다. Oracle, MySQL와 같은 관계형 DB이지만, 소규모 데이터 저장에 적합한 DB이다. 다양한 스마트폰이나 임베디드 시스템에 탑재되어 있다. (가벼우니까~) Oracle, MySQL은 별도의 프로세스형태로 동작하지만 SQLite 엔진은 라이브러리 형식으로 지원된다. 데이터베이스를 사용하기 위한 Database Manager 클래스를 생성한다. public class StudentDBManager { static final String DB_STUDENTS = "Students.db"; static final String TABLE_STUDENTS = "Students"; static final int..
앱 개발시 각종 환경 설정 값들을 보관하기 위한 목적으로 사용하는 저장공간이다. (예를 들어, 사운드 on/off, 진동 on/off 등의 기본적인 설정값들을 저장할 수 있다.) 앱이 종료되더라도 이러한 설정 값들은 저장되어야 하는데 이를 파일 입출력으로 처리하기는 매우 번거롭다. 따라서 이러한 역할을 수행하기 위해 Shared Preference를 사용한다. 1. 안드로이드에서 라이브러리로써 편리하게 제공한다. 2. HashMap을 사용해 원하는 데이터를 키/값 형태로 저장해 쉽게 추가, 삭제할 수 있다. 3. 내장메모리에 파일형태로 저장되기 때문에 앱이 종료, 핸드폰 종료되더라도 영구히 보관할 수 있다. 위와같은 앱에 대해서 Shared Preference를 사용하는 예시코드를 살펴보자. Shared..
안드로이드에서만 지원하는 파일 관련 함수들이 있다. 위 함수를 사용해 파일 입/출력을 수행한 예시코드는 다음과 같다. // 파일쓰기 try { FileOutputStream fosMemo = mContext.openFileOutput(FILE_NAME, Context.MODE_PRIVATE); fosMemo.write(strData.getBytese()); fosMemo.close(); } catch(Exception e) { e.printStackTrace(); } // 파일읽기 try { FileInputStream fisMemo = mContect.openFileInput(FILE_NAME); byte[] memoData = new byte[fisMemo.available()]; while(fisM..
AIDL을 사용해 두 개의 서로다른 Application에서 Remote Bound Service를 구현하는 코드를 보자. 우선 잘못 구현된 케이스의 코드이다.Started Service를 사용한 Service를 구현해본다. public class CountService extends Service { public void onCreate() { // ... } public int onStartCommand(Intent intent, int flags, int startId) { // ... } public void onDestroy() { // ... } // 이 밑이 꼭 필요한 함수들이다. public IBinder onBind(Intent intent) { // ... return null; } p..
Global Broadcast의 문제점? Broadcast를 프로세스의 경계를 무시하고 안드로이드 시스템에 등록된 모든 Receiver에게 전달한다. 앱이 발생한 Broadcast의 정보를 다른 앱이 관찰 또는 감시할 수 있다. (앱의 행위를 제3자가 알 수 있기 때문에 보안상 문제가 될 수 있다) 추가적으로 Receiver는 Broadcast가 전송될 때마다 리소스를 소비하기 때문에 시스템에 부하가 된다. 자기 앱내에서만 알 수 있는 Receiver와 Broadcast를 구현하고 싶다. 만약 유명한 Application에서 내부에서 Broadcast보내는 것을 Global Broadcast로 사용하게 되면, 악성 앱을 생성해 유명한 Application에서 보내는 Broadcast를 받도록 할 수 있고..