Android/Android 일반 56

애드몹(Admob) 보상형 광고 예제

애드몹(Admob) 보상형 광고예제Document: https://developers.google.com/admob/android/quick-start?hl=enAdmob: https://apps.admob.comGithub: https://github.com/lipnus/admob_reward_ad_sample Gradleimplementation 'com.google.android.gms:play-services-ads:17.2.0' Manifest ca-app-pub-3940256099942544~3347511713 ca-app-pub-3940256099942544/5224354917 이 예제는 문서에 적혀있는 테스트아이디를 사용 MainActivity.ktpackage com.empo.androi..

[Anotation] @RequiresApi, @TargetApi

RequiresApi, TargetApi@TargetApi(Build.VERSION_CODES.O) fun test2(){ } @RequiresApi(Build.VERSION_CODES.O) fun test1(){ }@TargetApi는 IDE에 알려주기만 하는 것.@RequiresApi는 호출 조건을 강제 하는 것. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_test_activty) test1() //안됨 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) test1() //ㅇㅋ test2(..

뷰(View)가 그려지는 과정

안드로이드에서의 액티비티가 포커스를 얻으면, 자신의 레이아웃을 그리도록 요청한다. 이때 액티비티에 레이아웃의 계층구조 중 루트(root) 노드를 제공해야 한다. override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(com.empo.android.empoapp.R.layout.activity_main) } 뷰를 그리는 과정은 측정(Measure), 레이아웃(Layout) 단계가 있다. 측정(Measure) 과정 - 뷰의 크기를 구한다 public final void measure (int widthMeasureSpec, int heightMeasureSpec) measure()..

Handler 구현

Handler 기본 생성자를 통해 Handler를 생성하면, 생성되는 Handler는 해당 Handler를 호출한 위치의 스레드의 MessageQueue와 Looper에 자동 연결된다. 1. 메인 스레드가 기본적으로 루퍼를 가지고 있다. 2. 메인스레드에 있는 루퍼는 static 변수로 정의되어 있다. 3. 따라서 어느 쓰레드에서 handler를 부르던 메인스레드에 있는 루퍼 객체를 참조한다. 4. 메인스레드가 아닌 스레드에서는 안드로이드 화면에 그리는 것이 불가능 하기 때문에 핸들러를 사용하는 것이며, 핸들러를 통해 전달된 메세지는 루퍼의 메세지 큐에 저장된다. class MainActivity : AppCompatActivity() { var count = 0 override fun onCreate(..

스레드 구현방법 (Thread클래스 상속, Runnable인터페이스 구현)

스레드를 구현하는 두가지 방법 1. Thread클래스를 상속(extends) -> run() 오버라이드 2. Runnable인터페이스 구현(implements) -> run() 구현 1. Thread클래스 상속하는 방법class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val testThread = TestThread() testThread.start() } } class TestThread: Thread(){ override fun run() { Log...

핸들러(Handler), 루퍼(Looper), 메시지큐(Message Queue)

Handler스레드 간의 통신장치 1. Looper로부터 받은 Message를 처리한다. 2. 다른 스레드로부터 메시지를 받아서 Message Queue에 넣는 역할을 한다. - Handler는 스레드의 Message Queue와 연계하여 Message나 Runnable객체를 받거나 처리하여 스레드 간의 통신을 할 수 있도록 한다. - Handler 객체는 하나의 스레드와, 해당 스레드의 Message Queue에 종속된다. - 새로 Handler 객체를 만든 경우 이를 만든 스레드와 해당 스레드의 Message Queue에 바인드된다. - 다른 스레드의 속한 Handler의 post나 sendMessage 등의 메서드를 호출해서 다른 스레드로 메시지를 전달 할 수 있다. - Message Queue는 ..

Service(unbind, bind)

Service(unbind, bind) Unbound Service startService()를 통해 시작된 서비스는 한번 시작되면 백그라운드에서 무한정 실행될수 있다. 서비스를 시작한 액티비티가 소멸되어도 동작한다.그러나 이렇게 시작한 서비스는 호출한 쪽에 어떠한 결과를 반환할수 없다. 이를 Unbound Service라고 한다. bound ServicestartService() 메소드 대신 bindService() 메소드를 통해 시작되는 서비스를 서비스 바인딩 (Service Bind 혹은 Bound Service)이라 한다.- 이 서비스는 마치 클라이언트-서버 와 같이 동작한다. 서비스가 서버 역할. - 액티비티는 서비스에 어떠한 요청을 할수 있고, 서비스로부터 어떠한 결과를 받을수 있다. - 프로..

AIDL(Android Interface Definition Language)

안드로이드 인터페이스 정의 언어 (AIDL) Service다루는 방법 1 startService() / stopService() 를 이용해서, 특정 Service 를 시작 하거나 종료. Service다루는 방법 2 bindService()를 이용해서, Service 의 IBinder 객체를 얻어온 후, 해당 Service 에서 정의된 API 를 호출 - API호출방법1 - local serviceService와 Service를 이용하는 어플리케이션이 항상 동일한 Process 에서 작동하는 경우에 해당. 이 경우 bindService() 의 결과로 바로 해당 Service 에 접근해서 원하는 API 를 호출할 수 있다. - API호출방법2 -Remote Service실재로 Service가 돌고 있는 Pr..

Nought(7.0)미만 WifiManager 메모리 누수 문제

Android Nought(7.0)미만에서 WindowWifi사용시 메모리 누수문제 Android DocumentWifiManagerpublic class WifiManager extends Object java.lang.Object ↳android.net.wifi.WifiManager This class provides the primary API for managing all aspects of Wi-Fi connectivity.On releases before Build.VERSION_CODES.N, this object should only be obtained from an Context#getApplicationContext(), and not from any other derived cont..

Intent Flag

Intentval iT = Intent(this, MainActivity::class.java) iT.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(iT) FLAG_ACTIVITY_SINGLE_TOPiT.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)동일한 액티비티가 연속으로 쌓을 경우, 새로 Create하지 않고 기존 액티비티를 onPause(), onNewIntent(), onResume() 순서로 재활용 FLAG_ACTIVITY_CLEAR_TOPiT.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP) 새로 호출한 액티비티가 이미 스택에 쌓여있는 경우, 해당 액티비티를 순서로 재활용하고, 아래 있는 ..

Context

Context의 정의Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. Application 환경에 대한 전역 정보를 접근하기 위한 인터페이스.추상 클래스이며 실제..