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를 받도록 할 수 있고..
public final class ActivityManagerService extends ActivityManagerNative { ... static final int BROADCAST_FG_TIMEOUT = 10 * 1000; static final int BROADCAST_BG_TIMEOUT = 60 * 1000; ... } 안드로이드 API 15 ICS 버전까지의 Broadcast Receiver의 시간제한 Broadcast Receiver도 Main Thread에서 처리되기 때문에 ANR이 존재한다. 정확한 Broadcast Receiver의 시간제한은 안드로이드 버전별로 차이가 있다. Foreground vs Background (Broadcast) Foreground Broadcast는 우선..