일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 보늬밤
- Kotlin
- WebView
- AfxMessageBox
- 리틀포레스트
- 제곱근
- LRU
- synergy
- memory
- Java
- Dokka
- math
- android
- MFC
- 동적프로그래밍
- QoS
- 형변환
- FirebaseAuth
- 피요모리2
- 코인거스름돈
- devicedriver
- darkmode
- DataStructure
- 쌓기게임
- DynamicProgramming
- Collection
- stack
- 피보나치
- Dialog
- SPI
- Today
- Total
목록Computer/Android (30)
퉁탕퉁탕 만들어보자

https://hosyonty.tistory.com/entry/Java%EC%99%80-Android%EC%9D%98-GC-1 Young CC 대신 전체 힙 CC가 다음 동시 GC로 선택된다. 3) 만약 전체 힙 CC가 완료되면 다음번에는 다시 Young CC로 전환한다. 이 전략이 작동하는 한 가지 주요 요소는 CC가 완료된 후 Young CC에서 힙 공간 한도를 조정하지 않는다. 이로 인해 처리량이 전체 힙 CC보다 낮아질 때까지 Young CC가 더 자주 발생하게 된다. 2. kswapd kswapd는 가용메모리가 부족해질 때 1) 활성화되어 사용된 페이지 (캐시된 비공개 dirty page, 익명의 dirty page)를 zRam으로 압축해서 집어넣는다. 2) 그리고 다시 프로세스에서 이부분이 접..

가끔 검증자로부터 이슈가 올라온다. 그 중 Memory관련된 이슈는 보통.. "버벅거린다" 이슈와 "앱이 강제종료되었다" 이슈다. "강제종료되었다" 는 Log를 보면 FATAL Exception인 경우가 사실 거의없다. 개발단계에서 쉽게 검출되기 때문에 잡고나간다. 그런데도 강제종료되는 케이스를 보면 매우 드물지만, LMK가 내 앱을 죽여버린것이다. 그러면 이제 "메모리부족이라 LMK가 죽인것임 내 앱이 잘못된게 아님" 으로 이슈를 닫으면 된다. "버벅거린다" 이슈는 사실 잡기 어려운데, 전반적인 성능개선이 필요하기 때문이다. 그렇지만 이것도 가끔 log보면 내 문제가 아닌경우가 있는데 "OOM"로그가 잔뜩 찍혀있는 경우가 있다. 이 경우에는 android GC가 돌고있는 상황이라 느려진것으로 보고 "전..
모바일 기기는 기기마다 픽셀 밀도가 다를 수 있다. 그래서 android에서 어떤 이미지나 view의 크기를 지정할때 px단위로 지정을 하게되면 서로다른 모습으로 나타나게 될 수있다. (실제 mm2당 픽셀 개수가 다르니까 - 더 길거나 짧게 나옴) 따라서, 밀도가 서로 다른 회면에서 UI크기를 동일하게 보여주기 위해서 dp라는 단위를 사용한다. dp의 뜻은 density-independent pixel의 줄임말이다. 1dp는 (160dpi - mdpi 기준 밀도)에서 1px과 거의 동일하다. 예를들면 100dp짜리 뷰는 mdpi 기기에서 100px이고, xhdpi에서는 200px이다. 가끔 px값이 필요한 경우가 있는데, 이때 dp를 dencity값을 사용해서 px로 변환을 할 수 있다. px = dp ..

Android Graphic Architecture를 (살짝) 알아보자 보통, 카메라 프리뷰나 MediaPlayer, OpenGL 을 사용할때 SurfaceView나 TextureView 둘 중에 하나를 선택을 해서 렌더링을 하게 된다. 두 View 모두 Surface를 통해서 ImageStream을 그린다는 점은 같지만, 동작방식이 다르다. 총 Flow를 살펴보면 이미지스트림 생성자(MediaPlayer또는 CameraPreview) -> 서피스 -> 서피스 플링거 -> HW Composer -> display 의 과정을 거친다. 먼저 이 모든 과정에서 사용되는 Buffer Queue에 대해서 알아보자 버퍼 큐는 여러개의 버퍼를 갖고있는 queue 이다. 보통 1~3개의 버퍼를 갖고있고, 각각 다른 o..
세팅값 읽기 세팅값에는 크게 Global, System, Secure 세가지가 있다. 어느 클래스에 있는 값이냐를 확인하고 name을 가지고 그 값을 가져올 수 있다. Settings.Global.getXXX(ContentResolver contentResolver, String name); Settings.System.getXXX(ContentResolver contentResolver, String name); Settings.Secure.getXXX(ContentResolver contentResolver, String name); 가져올 수 있는 setting 값들은 아래 문서에 정리되어있다. https://developer.android.com/reference/android/provider/S..
앱에서 시스템 설정 변경 이벤트를 바로 알고 싶을때가 있다. 이를테면 사운드변경이나, 화면밝기변경 같은게 있을 수 있다. 앱에서는 보통 database나 파일에 접근하기 위해서 ContentProvider를 사용한다. Setting에서도 setting값을 주는 Content Provider를 제공한다. Settings.System.CONTENT_URI이다. 볼륨변경을 Activity에서 알고자 하는 상황을 예로 든 코드이다. 1. Activity단에서 volume change를 간단하게 처리할 수있는 리스너를 하나 만든다. public interface OnAudioVolumeChangedListener { void onAudioVolumeChanged(int currentVolume); } 2. Con..
맨 처음 Activity를 만들면 onCreate()의 인수로 savedInstanceState가 넘어오는것을 보고 이건 무엇일까? 생각하게된다. override fun onCreate(savedInstanceState: Bundle?) Framework는 Activity가 예상치 못하게 종료되는 경우를 대비해서 onSaveInstanceState를 호출해줘서 이때 여기서 필요한 정보를 저장하고, Acticity가 재시작될 때 이때 저장된 bundle을 onCreate 또는 onRestoreInstanceState 에서 처리를 해줄수 있게 해준다. 그러면 onSaveInstanceState가 언제 불리는지를 알아야한다. 바로바로 Activity가 정지될때 불린다. 하지만 user가 Activity를 명시..
화면을 회전하자 activity가 죽었다가 재시작을 하게된다.어떻게 하면 Activity가 onDestroy -> onCreate하며 재시작하지 않게 할 수 있을까? 화면 orientation(세로/가로) 변경 시 configuration이 change되었을 때 activity는 destory -> create가 되는 것은 resource를 다시 로드해서 올바르게 화면을 표시하게 할 수 있도록 framework가 의도한 동작이다. 보통 layout파일을 layout-land, layout-port 두가지로 파일을 유지한다.하지만 layout이 거의 비슷하면 파일 두개로 쓰지않고 하나로 쓰면서, 달라지는 부분만 dimen값을 values-land 에만 따로 정의한다. --> 이렇게 사용하면 재시작이 필요..

Activity의 상태는 launch -> destroy 까지 수명 사이에서 일어나는 주기를 말한다. Android app을 개발하며 가장 먼저 알아야 하고 중요한 내용이다. 1. onCreate Activity가 생성되었을 때 불리는 콜백이다. 이 단계에서, 가장 먼저 layout inflate 를 하여 setContentView를 해서 layout과 연결을 한다. 그 외 기타 Activity가 생성될때의 초기화 작업을 하게된다. 이를테면 ViewModel 생성이나 layout내의 뷰와 연결을 한다. 2. onStart onCreate()이 끝나면 시스템이 자동으로 onStart를 불러준다. 특별한 경우가 아니면, onStart에서 보통 뭔가 처리하지 않는다. * onStart는 보이기 직전에 불린다...
Android webview에 darkmode 적용은 Q이상부터 가능하다. 13이상 (API 33) 부터는 동작이 변경되어 맨 아래에 따로 기술한다. (매우 간단해짐!) Target SDK 33 이전 webview를 dark하게 만드는 방법은 2가지가 있다. 1) User Agent(browser) 가 강제로 dark하게 만드는법 2) 웹 페이지에서 CSS를 통해 dark 테마를 적용하는 법 1. WebView에 setForceDark를 해준다. WebSettingsCompat.setForceDark(...) * 업데이트! Android 13(API 수준 33) 이상을 타겟팅하는 앱의 경우 setForceDark() 메서드가 지원 중단되므로 이 메서드가 호출되면 작동하지 않음! 우선 1)번과 2)번 둘다..