mvp model view presenter 프리젠터가 모델과 뷰 사이에서 인터랙션한다.

뷰와 프리젠터는 contract 내의 view와 model 인터페이스를 각각 구현해 인터랙션


mvvm model view viewmodel 

observablefield livedata 데이터바인딩과 사용하여 xml에서 뷰표시

아래 두줄은 블로거가 작성한 내용이다.

사용시 livedata는 데이터 표현 용으로는 적합했지만 이벤트 처리에는 좋지 않았다.

이벤트 처리 등에는 contract 인터페이스를 뷰에서 구현해 처리하는 것이 좋겠다.

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

서포트 라이브러리

v4 노티피케이션컴팻, 뷰페이저, 로더

v7 AppCompat, Theme.AppCompat, 툴바, CardView, RecyclerView, Annotation, Design 네비게이션 드로워, fab, snackbar 등


Headsu-Up Notification 알림이 앱 상단에 표시

.setPriority를 최대로 혹은? .setVibrate(퍼미션 필요) 확인필요


RecyclerView StaggeredGridLayoutManager 형태가 일정하지 않은 아이템


사이즈 고정시 setHasFixedSize(true)로 성능 개선


ItemDecoration 을 이용해 구분선 등 작업 offset(여백) onDraw(표시)


ItemTouchHelper 밀어서 삭제하거나 데이터를 이동 SimpleCallback 구현


블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,
ContentProvider는 안드로이드 스튜디오에서 생성마법사로 간단히 생성가능
exported 다른 앱에 공개할지 여부

adb 로 contentprovider에 접속
adb shell content query --uri content:://com.advanced.android/wordoftoday 
--projection _id:words:name
adb shell content query --uri content:://com.advanced.android/wordoftoday/0 
--projection _id:words:name
adb shell content query --uri content:://com.advanced.android/wordoftoday 
--projection _id:words:name --where "name='Taiki'"
adb shell content insert --uri content:://com.advanced.android/wordoftoday/ 
--bind name:s:Shunsuke --bind date:i:20151015 --bind words:s: '오늘은 멋진 날'
혹은 페이스북에서 개발한 Stetho를 이용

wakelock 화면 on cpu on full_wake_lock (deprecated)
화면 on(약간 어두움) cpu on screen_dim_wake_lock (deprecated)
화면 off cpu on partial_wake_lock
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 을 이용
서포트 라이브러리 WakefulBroadcastReceiver 사용 (60초만 얻고 해제됨) 퍼미션 사용
사용 후 WakefulBroadcastReceiver.completeWakefulIntent()로 해제

wakelock 상태 확인 adb shell dumpsys power
블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

AppCompatActivity를 이용할 수 없을 때는 AppCompatDelegate를 이용한다.

AppCompatDelegate delegate = new AppCompatDelegate(this);
delegate.setContentView(R.layout.activity_main);


액티비티 수명주기는 익히 알고 있고 사용하고 있지만 

처리 예에 대한 가이드가 있어서 작성한다.


액티비티 수명주기와 처리 예


 메서드명 

 시점 

 처리 예 

 onCreate

 생성 시

 초기화 처리나 뷰 생성 

 onStart

 비표시 시

 통신이나 센서 처리 시작 

 onRestart

 표시 시(재시작)

 보통은 X

 onResume

 최전면 표시

 애니메이션 등 화면 갱신

 onPause

 일부 표시 상태 

 화면갱신 (일시)정지, 리소스 해제

 onStop

 비표시 상태

 통신이나 센서 처리 정지 

 onDestory

 폐기 시

 필요없는 리소스 해제, 액티비티 참조 정리 


같은 앱에서 시작된 액티비티는 같은 백스택에 쌓인다

taskAffinity의 속성에 따라 소속되는 태스크가 달라진다

launchMode에 따라 액티비티 생성여부, 새로운 태스크에 속하는 등 시작이 다르다


액티비티 재생성시 onSaveInstanceState/onRestoreInstanceState 에서 저장하고 복원


액티비티 런치모드 

 launchMode 

 내용 

 standard

 매번 액티비티의 인스턴스 새로 생성 기본값 

 singleTop 

 같은 액티비티가 최상위에서 실행중이면 생성x onNewIntent 

 singleTask

 1개의 태스크에 인스턴스 존재, 같은 액티비티 있으면 생성x

 singleInstance 

 1개의 태스크에 1개의 인스턴스만, 다른 액티비티 포함x, 

 같은 액티비티 생성x 


싱글태스크에서 taskAffinity를 설정하면 여러개의 태스크에서 

singleTast, singleInstance 로 설정하면 startActivityForResult 불가

바로 RESULT_CANCELED가 반환


adb 백스택 확인 : adb shell dumpsys activity activities


화면 밀도 dp와 px


 밀도

 dp

 px

 ldpi

 1dp

 0.75px 

 mdpi

 1dp

 1px

 hdpi

 1dp

 1.5px

 xhdpi

 1dp 

 2px

 xxhdpi

 1dp 

 3px

 xxxhdpi

 1dp

 4px


fragment lifecycle

 메서드명 

 시점 

 실행하는 처리의 예

 onAttach

 액티비티 연결

 getActivity()는 널

 onCreate

 생성 시

 초기화

 onCreateView

 생성 시

 뷰 생성

 onActivityCreated

 생성 시

 초기화, 뷰 생성

 onStart

 비표시 상태

 표시 전 시점

 onResume

 표시 시

 필요한 애니메이션 등 화면 갱신

 onPause

 일부 표시 상태

 화면갱신 처리 (일시)정지, 리소스 해제

 onStop

 비표시 상태

 비표시된 시점

 onDestoryView

 폐기 시

 필요 없는 리소스 해제

 onDestory

 폐기 시

 필요 없는 리소스 해제

 onDetach

 폐기 시

 필요 없는 리소스 해제


아래 두줄은 블로거가 추가한 내용이다.

기존 생성된 프래그먼트가 액티비티에 추가될 땐 onCreateView 이하부터 시작된다.

onCreate에서 해줘야 다시 반복되지 않는다.


customview 에서 layout 대신에 merge태그를 쓰면 기존 레이아웃에 포함된다


ui를 갖지 않는 headless 프래그먼트 뷰 재생성시에도 재생성되지 않는다

네트워크 탐지등에 사용

setRetainInstance(true)

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,

기초적인 수준을 다루고 있는 튜토리얼 형식의 안드로이드 개발서적은 참 많다.

하지만 조금 더 높은 수준으로 올라가기 위한 책은 찾아보기 어려웠다.

그러다가 수개월전? 검색을 통해 알게 된 안드로이드 개발 레벨업 교과서를 빌려서 그 내용을 정리해서 다시 복습하려고 한다.


먼저 1장은 대부분 알고 있는 내용이 대부분이라 사소한 팁을 위주로 작성하려 한다.

알고 있는 부분은 작성하지 않았다.


개발장비(PC, Laptop)에 연결된 안드로이드 디바이스가 여러개라면 

shift를 누른 상태에서 단말기를 선택하면 한꺼번에 모두 설치 실행할 수 있다.


단축키 : 


find action ctrl+shift+A Android Studio의 기능을 검색


smart type completion ctrl+shift+space 자료형에 맞게 자동완성


complete current statement ctrl+shift+enter 현재 작성중인 구문 완성


parameter info ctrl+p 매개변수 정보 표시


extract ctrl+alt+v,f,m,c (variable, field, method, const) 자동 항목 완성


postfix 자동완성 변수.par (변수) 처럼 괄호처리 

.notnull null 체크 if

.var .field


alt+숫자(툴 윈도우 열기)


ctrl+e 최근 사용한 파일


shift+shift 통합검색(코드+리소스)

ctrl+shift+alt+n 코드 검색

ctrl+b 선언부 열기

ctrl+alt+h 메서드 호출한 곳 열기


디버깅시 마우스 오른쪽으로 브레이크 포인트 설정하면 조건부 설정가능

블로그 이미지

dev김

안드로이드 개발자로 만 4년이 좀 안되게 근무했었고 그 이상의 공백을 가지고 있다. 다시 현업에 복귀하기 위한 노력의 흔적을 담으려고 한다.

,