Service FLAG bindService 에서 사용되는 FLAG BIND_AUTO_CREATE Component 와 연결되있는 동안 비정상적으로 종료시 자동으로 다시 시작된다 BIND_DEBUG_UNBIND 비정상적으로 연결이 끊어지면 로그를 남긴다 (디버깅용) BIND_NOT_FOREGROUND 백그라운드로만 동작한다. 만약 Activity 에서 생성한 경우 Activity 와 생성주기를 같이한다 + References https://tourspace.tistory.com/19
동적 BroadcastReceiver 동력 BroadcastReceiver 는 123456789101112131415 Colored by Color Scriptercs 이처럼 AndroidManifest.xml 에 등록하는 정적 리시버와 다르게 12registerReceiver( BroadcastReceiver, IntentFilter )unregisterReceiver( BroadcastReceiver )cs 이 함수를 통해 리시버를 등록, 해제 한다 등록시에 IntentFilter 에는 수신하고자 하는 이벤트를 전달해 준다 사용법은 http://helloit.tistory.com/267 등 여러곳에 잘 나와있으니 참고하자 정적 리시버와의 차이점 정적 리시버를 등록하여 사용하면 구현한 앱이 동작 중이 ..
BLEBLE ? BLE 의 연결 방식블루투스 프로토콜 스택GAP(Generic Access Profile)GATT(Generic Attribute Profile)GATT 구조References BLE ?Bluetooth 4.0 이전에는 Master, Slave 관계를 형성해 통신하는 Bluetooth Classic 방식을 사용했었다.하지만 이 방식은 배터리 소모량이 많아 불편함과 제약이 많았다.2010년에 Bluetooth 표준으로 Bluetooth 4.0 이 나왔는데,Classic 방식보다 훨신 적은 전력으로 비슷한 수준의 통신을 할 수 있게 되었다.이를 BLE(Bluetooth Low Energy) 라고 부른다. 블루투스 장치의 구분블루투스 통신을 사용하는 장치들은 3가지로 구분되지만, 개념적인 구분..
:: ( 더블콜론 ) ? Java8 에서 추가된 메소드 참조 ( Method Reference ) 연산자이다 메소드 참조는 람다 식과 동일한 처리 방법을 갖는 표현식이지만 람다 본문을 제공하는 대신, 이름으로 기존 메소드를 참조한다 1234567List list = Arrays.asList("a1", "b1", "a2", "b2"); System.out.println(" -- Using Lamda Functions --"); list.stream().map(s -> s.toUpperCase()).forEach(s -> System.out.println(s)); System.out.println(" -- Using Method Reference --");list.stream().map(String::toU..
Iterator ( 반복자 ) ? 자바의 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있다 Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다 Set, List 등은 Collection 을 상속 받고 Collection 이 Iterable 을 상속 받고 있다 따라서 Collection 인터페이스를 상속받는 List 와 Set 인터페이스에서도 iterator() 메소드를 사용할 수 있다. Map 은 Set 이나 List 와 달리 Key-Value 의 구조이다Key 에 대한 Iterator 인지 Value 에 대한 Iterator 인지 구..
primary constructor call expected 기본 생성자 호출이 필요 합니다 Kotlin 기본 생성자에 대한 호출이 Kotlin 보조 생성자의 정의에 없을 때 발생 class Student(var name: String="") { var age: Int = 14 constructor (name: String, age: Int){ this.age = age } fun printMsg(){ println("Name is $name. Age is $age."); }} this 키워드를 사용하여 해결 기본 생성자 똑는 기본 생성자를 호출하는 이전 보조 생성자에 대한 호출을 포함한다 class Student(var name: String="") { var age: Int = 14 construct..
lateinit var is initialized isInitialized 를 이용하여 lateinit var 이 초기화되었는지 여부를 확인 할 수 있다 12345678910111213class Foo { lateinit var lateTest: String fun init() { println("before init : ${this::lateTest.isInitialized}") lateTest = "value" println("after init : ${this::lateTest.isInitialized}") }} fun main(args: Array) { Foo().init()}Colored by Color Scriptercs + Reference http://kotlinlang.org/docs/r..
Kotlin 의 특수 기호 ?. safe call 을 수행한다메소드가 호출되거나 수신기가 null 이 아닌 경우 속성에 액세스 ?. 을 이용한 null safety if ( user != null )println("user is not null")elseuser = false 위의 코드를 ?. 을 이용하면 user?.let { println("user is not null") }.let { println("user is null") } 위와 같이 표현 할 수 있다 ?: 왼쪽의 값이 null 인 경우 오른쪽 값을 가져온다 ( 엘비스 연산자 ) Elvis Operator val l: Int = if( b != null ) b.length else -1 을 val l = b?.length ?: -1 처럼 표현..
lateinit vs lazy Kotlin 에서 초기화 지연 방식 두 가지를 지원한다 lateinit public class Test { lateinit var mock: Mock @SetUp fun setup() { mock = Mock() } @Test fun test() { mock.do() } } lazy public class Example{ val name: String by lazy { “Amit Shekhar” } } 언제, 어느것을 사용할지 선택하는 방법 - lazy 는 val 속성에만 사용할 수 있지만, lateinit 은 최종 필드로 컴파일 할 수 없기 때문에 vars 에만 적용 할 수 있으므로 불변성을 보장 할 수 없다. - lateinit var 는 객체가 보이는 곳이라면 어디서든..