original source : https://youtu.be/UyUmQaUtUVI

=========================================================

.

.

=========================================================

.

.

아래는 service에서 activity로 data를 전달하는 경우이다.

=========================================================

.

.

아래는 service에서 activity로 data를 전달하고 다시 data를 전달 받는 경우를 보여주고 있다.

=========================================================

.

.

=========================================================

.

.

application A는 permission #1을 정의하고 normal level로 정의했다. 이경우 application은 permission #1을 가지고 있으므로 application A에 접근가능하다. 그러나 application B는 permission level이 signature이므로 application C에서 permission #2를 가지고 있음에도 불구하고 application B에 접근할수 없다.

=========================================================

.

.

=========================================================

.

.

original source : https://youtu.be/hLPXmoU9D4s

=========================================================

.

.

=========================================================

.

.

Sticky Broadcast의 경우 이미 발생한 이벤트가 시스템에 저장되어있다가 앱이 사용자에 의해 구동되고 앱이 진행되는 가운데 코드상에서 registerReceiver()를 통해 receiver가 등록되면 저장되었던 이벤트가 전달되는 경우를 말한다.

=========================================================

.

.

=========================================================

.

.

아래는 android studio를 이용 receiver를 추가하는 방법을 설명한다.

=========================================================

.

.

=========================================================

.

.

registerReceiver()를 사용한 경우 memory leak방지를 위해 반드시 unregisterReceiver()를 수행한다.

=========================================================

.

.

original source : https://youtu.be/hLPXmoU9D4s

image
image

=========================================================

.

.

image
image

=========================================================

.

.

image
image

Sticky Broadcast의 경우 이미 발생한 이벤트가 시스템에 저장되어있다가 앱이 사용자에 의해 구동되고 앱이 진행되는 가운데 코드상에서 registerReceiver()를 통해 receiver가 등록되면 저장되었던 이벤트가 전달되는 경우를 말한다.

=========================================================

.

.

image
image

=========================================================

.

.

아래는 android studio를 이용 receiver를 추가하는 방법을 설명한다.

image
image
image
image
image
image
image
image

=========================================================

.

.

image

=========================================================

.

.

image
image
image

registerReceiver()를 사용한 경우 memory leak방지를 위해 반드시 unregisterReceiver()를 수행한다.

=========================================================

.

.

image

original source : https://youtu.be/VLZDGPStEp4

image
image

service가 background에서 작업은 하지만 main thread에서 수행된다.

=========================================================

.

.

image
image
image
image
image
image
image

=========================================================

.

.

image
image

=========================================================

.

.

아래 코드에서 i.putExtra(”value”,”activity”)의 경우 data를 pending intent에 넣고 나중에 다시 activity 의 onActivityResult()에서 data.getStringExtra(”value”)를 통해 다시 되돌려 받게 된다. 

image
image
image

=========================================================

.

.

image

AIDL android interface definition language

aidl 은 interface와 작성방법이 거의비슷하다. aidl을 아래와 같이 정의하면 코드상에서 사용될때 아래와 확인할수 있듯이 Stub()을 사용할수 있게 된다. Stub()을 통해 IBinder obj를 얻을수 있고 이를 variable에 저장하고 이를 onBind()를 통해 되돌린다. 

activity에서 bindService()를 통해 bound service를 시작하게 되면 service내의 onBind()가 호출되고 이 메소드 내에서 되돌려진 IBinder를 통해 activity에서 AIDL에 명시된 함수에 접근 할수 있게 되고 이를 통해 service와 소통할수 있게 된다.

image
image
image

=========================================================

.

.

JobScheduler는 service의 일종이며 특정 조건에 발생한 경우 작업이 수행되는 service이다.

image
image
image
image
image
image
image
image
image

original source : https://youtu.be/zBO_0_7huVA

이 강의는 custom view에서 어떻게 scroll을 내부적으로 처리하는지를 설명하고 있다.

ScrollBar를 보이기 위해서는 view의 android:scrollbars에 vertical 또는 horizontal을 입력한다.

아래 코드를 설명하면

GestureDetector를 이용해서 사용자의 scroll을 감지하면 onScroll()이 호출된다. scrollBy()를 통해 특정 이동만큼 view을 이동하고 invalidate()를 통해 다시 그린다. 

=========================================================

.

.

=========================================================

.

.

위와 같이 매번 scrollbars 항목을 지정하기 귀찮다면 아래와 같이 theme으로 지정하여 사용할수도 있다.

=========================================================

.

.

아래그림은 EdgeEffect의 예시를 보여주고 있다.

=========================================================

.

.

=========================================================

.

.

ClipData는 안드로이드에서 다른 앱에 ClipBoard나 drag and drop을 통해 전달될 정보를 가지는 class이다.

original source : https://youtu.be/nMP6fDNtbfY

image

Drawable obj는 내부에 getIntrinsicHeight(), getIntrinsicWidth() 함수들을 구현해서 외부에서 이 함수를 호출했을때 Drawable이 실제 그려지는 부분의 크기를 되돌린다.

Drawable obj는 내부에 setLevel(), setState() 함수들을 구현해서 각 level, state에 맞게 drawable obj가 행동하도록 만든다.

Drawable.Callback interface는 invalidateDrawable(),scheduleDrawable(),unscheduleDrawable()들을 구현해야 한다. 참조) https://developer.android.com/reference/android/graphics/drawable/Drawable.Callback

image
image

=========================================================

.

.

아래는 custom view내부에서 drawable을 사용하는 경우를 보여주고 있다

image

=========================================================

.

.

Drawable 자체를 만드는 과정

image
image
image

=========================================================

.

.

image

개발자가 새로운 Layout을 만들고 그 안에서 새로누 LayoutParams를 만들어 사용하는 경우 Layout class 안에 generatedLayouParams(), generateDefaultLayoutParams(), checkLayoutParams()를 구현해 주어야 한다.

image

original source : https://youtu.be/p4vCK93gOZQ

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

아래그림에서 DiscretePathEffect가 아닌 DashPathEffect이다.

=========================================================

.

.

ComposeShader는 여러개의 Shader를 혼합한 형태이다.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.

=========================================================

.

.