본문 바로가기
반응형

Android/디버깅8

[Android] 커스텀 뷰 invalidate 사용 시 주의 사항 안드로이드 커스텀뷰를 사용할 때 뷰를 re-rendering 하기 위해서는 invalidate 함수를 호출해야 한다. 허나 이때 주의사항이 있다. 반드시 메인스레드에서 호출해야 된다. 그러지 않을 경우 갑자기 메인스레드가 먹통이 된다. 별다른 로그도 없이 갑자기 퀙 하고 먹통이됨. 앱을 종료해도 죽지 않고 프로세스가 좀비마냥 살아있어 다시 실행도 안되고 해결하려면 adb로 kill 해주거나 reboot을 해야한다. 만약 다른 스레드에서 invalidate를 호출하고 싶으면 postInvalidate() 함수를 사용하면 된다. - 2022. 8. 22.
[Android] 앱에서 스크린 캡쳐 막기, recent app 썸네일 가리기 앱에서 스크린샷을 막는 방법은 아주 간단하다 액티비티 안에서 FLAG_SECURE를 SET 해주면 된다. getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); 허나 이 플래그를 언제 SET해주는게 좋을 까? 케이스는 2가지 이다 1. 앱 사용 내내 스크린샷을 막고 싶을 때 이는 onCreate()에서 set 해주면 된다 public void onCreate() { getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); } 2. 앱에서 스크린샷은 허락하나 recent app으로 넘어갈때 스냅샷을 막고 싶을 때 만약 앱에서 screenshot은 허용하나 recent app으로 넘어갈 때 썸네일 이.. 2022. 7. 12.
[Android] RecyclerView 데이터 꼬일 때 대량의 데이터를 단순 출력하는데에는 RecyclerView가 최고의 선택일 것이다. 허나 단순출력을 넘어 데이터에 리스너등을 달아주는 순간 데이터가 꼬이기 시작한다. 이러한 문제의 원인은 ViewHolder를 재사용함에 있어서 발생하는 문제이다. 그럼 어떻게 해결해야 할 까? 걍 리스트뷰를 쓰는게 나을까? 해결방법1 : 재활용 막기 holder.setIsRecyclable(false); 위와같이 홀더의 재활용을 막으면 데이터 꼬임 문제를 해결 할 수 있다. 하지만 이렇게 하면 리사이클러뷰를 사용하는 의미가 없다 해결방법2 : 재활용 될 때 뷰를 초기화 하기 내가 찾은 해결방법은 onViewRecycled(ViewHolder holder) 메소드를 재 정의 하는 것이다. 뷰가 재활용 될 때 홀더를 싹다 초.. 2022. 6. 28.
[Android] Room DB 에서 query함수 동작 안할 때 데이터베이스에 직접 쿼리를 날리고 싶어서 객체를 까보니 query 함수가 있다. 헌데 동작을 안한다 망할. 하루종일 찾아보니 execSQL 함수를 쓰니 동작한다. 도대체 저 query 메소드는 정체가 뭘 까? 하루종일 고생했네 //db.getOpenHelper().getWritableDatabase().query("UPDATE user SET value = '123'"); db.getOpenHelper().getWritableDatabase().execSQL("UPDATE user SET cookTime = '123'"); 2022. 6. 24.
[Android] AlertDialog에서 showSoftInput 동작 안할 때 커스텀 레이아웃으로 Dialog를 만들고 그 안에 EditText를 넣은뒤 다이얼러그를 띄우면 바로 키보드가 뜨도록 하는 작업을 하게 되었다. 헌데 키보드가 올라오지 않는다... 구글에 검색해보니 나와 같이 AlertDialog로 커스텀 레이아웃을 쓰는 사람들 모두 똑같은 문제를 겪고 있었다. 하루종일 찾아보니 AlertDialog의 Window관련 Flag들이 문제를 일으키는게 원인이라 하던데... 대충 만져보니 showSoftInput 함수가 동작하였다. 단 Forced로 설정해야지만 동작한다. Forced로 하면 키보드 입력이 끝나도 키보드가 내려가지를 않음 ㅠㅠ... 어떤 flag를 만져야 할지 전혀 감이 안잡혀서 결국 생고생 하다가 나만의 workaround를 찾아 내었다. editText.re.. 2022. 6. 23.
Installed Build Tools revision 31.0.0 is corrupted. Remove and install again using the SDK Manager 오늘 갑자기 저 에러가 자꾸 뜨면서 앱이 빌드가 안됨.. 원인을 찾아보니 gradle sync 할 때 dx 파일이 없다고 자꾸 나옴 방법을 찾아보니 다른사람들은 다 컴파일러를 다운그레이드 하는 방법만나옴 좀더 찾아보니 dx라는게 31버전부터 d8로 바뀌었다고 함. 도로 dx로 바꾸어주면 해결 C:\Users\User\AppData\Local\Android\Sdk\build-tools\31.0.0 d8.bat 을 dx.bat으로 바꾸어준다 C:\Users\User\AppData\Local\Android\Sdk\build-tools\31.0.0/lib d8.jar를 dx.jar로 바꾸어준다 2022. 4. 13.
Incorrectly nested parentheses in regexp pattern near index 자바 String의 split 함수를 쓰다가 위와같은 exception이 발생핳였다 split함수에 괄호 ")" 나 "("를 넣어줄 때 발생한다. 해결방법은 괄호 앞에 백스페이스 두개를 넣어주면 된다. 즉 "\\)" 아래처럼 사용 "문자열1 ) 문자열2".split("\\)"); 2022. 4. 5.
You cannot keep your settings in the secure settings 안드로이드 Room Database에 ContentProvider를 통하여 데이터를 write 하던중 저런 exception이 낫다 원인을 분석해보니 데이터베이스에 써줘야 할 column 값들 몇개가 누락되어 있었다 간단한 실수지만 검색해도 명확하게 해결이 안돼서 힘든 문제였음. 2022. 4. 5.
반응형