System Programming/Android
[Android/Kotlin] Coroutines
멀티쓰레딩을 처리하는데 사용할 수 있는 현재 프레임워크는 쓰레드로부터 안전한 실행을 보장할 수 있는 다른 간단한 방법이 없기 때문에 콜백 지옥 및 Blocking 상태로 이어진다. 코루틴은 성능 좋고 간단한 방식으로 동시성을 관리할 수 있다. 다음과 같이 멀티태스킹은 function A와 function B를 교차하면서 실행하면서 쓰레드를 최대한 활용할 수 있다. 코루틴과 쓰레드 모두 멀티태스킹을 지원하지만 코루틴은 사용자가 조작하여 기능을 실행할 수 있어 멀티태스킹을 매우 쉽게 만든다. 코루틴은 쓰레드를 관리하는 프레임워크에 가깝다. 코루틴은 두가지 유형이 있다. stackless stackful 코틀린은 stackless 코루틴에 해당하므로 네이티브 쓰레드에 매핑되지 않는다. 따라서 프로세서에서 컨텍..
[Android] Manifest merger failed
Error Log Manifest merger failed with multiple errors, see logs Merged Manifest Manifest merger failed : Attribute application@appComponentFactory value=(androidx.core.app.CoreComponentFactory) from [androidx.core:core:1.0.0] AndroidManifest.xml:22:18-86 is also present at [com.android.support:support-compat:28.0.0] AndroidManifest.xml:22:18-91 value=(android.support.v4.app.CoreComponentFactory)..
[Android] Jetpack Compose
Jetpack Compose는 선언형 UI 도구 키트이다. 프런트엔드 뷰를 명령형으로 변형하지 않고도 앱 UI를 렌더링할 수 있게 하는 선언형 API를 제공한다. 1. 명령형 vs 선언형 기존 명령형 접근 방식 위젯을 인스턴스화함으로써 UI를 초기화한다. (보통 XML 레이아웃 파일을 inflate 하여 이 작업을 한다) 각 위젯은 자체 state 를 유지하고 위젯과 상호작용할 수 있는 getter 및 setter 메서드를 노출한다. Compose의 선언형 접근 방식 위젯은 보통 Stateless 상태이며 setter 또는 getter 함수를 노출하지 않는다. 위젯은 객체로 노출되지 않는다. 같은 Composable 함수를 다른 인수로 호출하여 UI를 업데이트한다.(이렇게 하면 MVVM과 같은 아키텍처 ..
[Android/Kotlin] Kotlin extension
안드로이드 4.1로 버전업하면서 Kotlin extension plugin이 삭제되어 추가 해줘야 한다고 한다 plugins { 'kotlin-android-extensions' } ...viewBingding을 사용하는 경우도 있다(https://1000sj.tistory.com/175)
[Android/Kotlin] Room을 사용하여 로컬 데이터베이스에 데이터 저장
1. dependency 추가 implementation 'androidx.room:room-runtime:2.3.0' implementation 'androidx.room:room-compiler:2.3.0' 2. 구조 database entities dao 1. Database @Database로 주석이 된 클래스는 다음 조건을 만족해야한다 RoomDatabase를 확장하는 추상클래스여야 한다. 주석 내 데이터베이스와 연결된 항목의 목록을 포함해야 한다. 인수가 0개이며 @Dao로 주석이 지정된 클래스를 반환하는 추상 메서드를 포함해야한다. // database : 데이터베이스 홀더를 포함하여 앱의 기본 연결을 위한 기본 액세스 포인트 역할 // entities(Class[]) : 데이터베이스에 포함..
[Android/Firebase] Firebase CRUD
Create final String uniqueKey = dbRef.push().getKey(); databaseReference.child(tablename).child(uniqueKey).setValue(data) Read ValueEventListener postListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // 근본 // Post post = dataSnapshot.getValue(Post.class); // 하위 리스트 가져오기 for (DataSnapshot dataSnapshot: snapshot.getChildren()) { val data = dataSn..
[Android/Firebase] Firebase Upload pdf
UploadPdfActivity.java package com.sjcoding.admincollegeapp; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.cardview.widget.CardView; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android..
[Android/Firebase] Firebase Database, Storage
Demo 0. Firebase 와 Android studio 연동 1. Database 생성 firebase console 에서 create database 를 test 버전으로 Create 해준다. storage, database rules를 체크한다. 여기서 read, write 제약을 걸 수 있다. 2. Dependencty 추가 android studio tools >> firebase >> database, storage 를 add하면 자동으로 추가된다. implementation 'com.google.firebase:firebase-database:20.0.0' implementation 'com.google.firebase:firebase-storage:20.0.0' 3. 데이터베이스에 쓰기..
[Android/Java] 갤러리 열고 그리기 MediaStore, bitmap
Demo 구성 permission activity layout - [AndroidMaifest.xml] - [UploadNotice.java] package com.sjcoding.admincollegeapp; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.widget.ImageView; import androidx.annotation.Nullable; import..