본문 바로가기

Android

안드로이드 개발

옛날 자료 보관용(2012년)


Java - 6.0 설치

eclipse - 4.2, 3.7

android SDK api - level 16 임


안드로이드는 내부가


안드로이드는 대부분이 통신임(브로드캐스트 방식) - 1:n, intent


dalvik VM : 프로세스 당 1개씩....



Context.openOrCreateDatabase()

커넥션 관련

SQLiteOpenHelper -

abstract

- onCreate

- onUpgrade

...

생성자에 database_name, version


CRUD 관련

SQLiteDatabase

- getWriteDatabase

- getReadableDatabase


ContentValues 맵형태임 cv


insert(TA테이블, CV콘텐츠벨류)

update

delete

query

execSQL

rawQuery




프로세스가 killed 될 수 있다...

어플리케이션 라이프사이클 vs 프로세스 라이프사이클

그냥 intent 같은걸 요청

베터리는 주로 하드웨어 자원 이용시임

프로세스를 죽이더라도 큰 의미가 없다. 강제 종료시 비정상 종료로 판단. => 액티비티의 경우 탑액티비티가 되면 다시뜨고, 이부이 ㄱ우


Lifecycle 테스트 [실습]

Oncreate OnRestart onPause, OnDestory - 이런거


프로세스 등급은 자기가 포함된 최상위의 등급임


포그라운드 프로세스 /FA

비지블 프로세스

서비스 프로세스

백그라운드 프로세스 /B

엠프티 프로세스


platform-tools


adb


activity manager running processes <dumpsys activity processes>

fixed - 포팅할때 줄수 있어 일반 개발자가 줄수는 없다 /F


getSystemService(..) // manager를 들을 가져오려면 이 서비스를 써야함


Lay






intent object에 있는 정보

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


암묵적 intent


action - 잘생겼다고 생각함


category - 160임


data - 신발


action은 꼭 들어감

category가 없으면 디폴드

data는 들어가도 되고 안들어가도 됨


------


intent filter에 대한 것은 자기자신이 결정함


인텐트 리졸루션에 의한 컴포넌트 활성화


apk 내부의 manifest 보고 intent 필터등을 테이블화


액티비티 같은 경우 사용자가 선택할 수 있도록


---


인텐트 플레그에서 FLAG_ACTIVITY_NEW_TASK 를 넣어줘여함.. 안그러면  브로드케스트 리시버에서 Activity를 실행하거나 브로드케스트 리시버에서 서비스에서 Activity가 실행 안됨...





모바일 생태계






Async

그냥 thread와 handler 이용하는 방법

AsyncTask 이용 excute - 상태값도 직접 모두 구현..

장점 - 종료 실행 반복시 thread가 무한히 늘어나지는 않음.

장점 - 일정 시간 지나면 thread pool로 반환을 함

단점 - 직접 핸들링하면서 제대로 쓰기엔 어려움




AIDL


AIDLCallBackClient

AIDLService

AIDLClient


activity Manager는 aidl 문서가 존재x 대부분 parcel


native로 시작하는 메소드는 c쪽 라이브러리를 직접 call


바인더통신, jni


<jni.h>는 jdk안에 있음

jstring Java_com_my_JNIClient_메소드명(JNIEnv* env, jobject this) { // 객체의 this값을 넘겨버림


}


Java_네임스페이스명_클래스명_메소드명(JNIEnv*env, jobject this, jint x, jint y)


javah


so 파일을 직접 만들어 내면 됨

(so 파일을 libs에 abi안에 넣어두면 됨, 로딩 가능 상태)


loadlibrary


Java에서 c 호출하기


c에서 Java 호출하기


"(I)I"


Z(boolean), B(byte), s(short) I(int) j(long) f(float) D(double), [type (배열)

레퍼런스타입은 L붙이고 마지막에 :을 붙임 ex) string : Ljava/lang/String:


예)

long fun(int n String s, int[] arr); => (ILjava/lang/String:[I)J


File explorer쪽


com.android.provider.contacts 여기 database안에 있음


에뮬레이터는 sd카드를 스캔하는작업을 따로 안하므로 devTool에 가서 mediaprovider에 가서 scan sdcard를 해준다..


이미지 관리는 contents provider를


settings도 contents provider에서 관리. e 쓰면 됨.