안드로이드 앱 개발 프로젝트1

7일차 -정보 삽입, 태그 검색 기능 구현 성공 -> 한계점 다수 발견, 전반적 방향 수정

원준킹 2021. 1. 17. 19:51

오늘 한 것

 

- 안드로이드 10 이상에서 listfiles()가 null을 리턴하는 문제 해결법

android:requestLegacyExternalStorage="true" 속성 추가 필요, 하위 버전에서 정상 동작하는지 나중에 테스트 필요

 

stackoverflow.com/questions/20714058/file-exists-and-is-directory-but-listfiles-returns-null

 

File exists and IS directory, but listFiles() returns null

The documentation for File.listFiles() suggests that null will ONLY be returned in the case that the file calling it is not a directory. I have the following: String dir = "/storage/emulated/0"; ...

stackoverflow.com

 

 

 

- 특정 경로 내의 mp4 파일의 정보를 데이터베이스에 삽입 성공

    - 동영상 파일의 시간을 MediaMetadataRetriever 클래스를 사용하여 시간정보 추출 후 밀리초 단위에서 초단위로 변환하여 length 컬럼 삽입

 

 

- 이미 데이터베이스에 존재하는 파일은 삽입하지 않음

    - 이 때, 이미 존재하는지의 여부는 location 의 동일 여부

    - 새로 삽입하는 파일들의 이름이 같을 수는 없으니 이 경우는 배제하고 구현

    - 걱정되는 점은 데이터베이스의 파일 개수가 N이면 시간 복잡도는 O(삽입파일 개수 * N)인데 N의 개수가 많이 크면 성능 저하가 의심됨

 

 

- 실제 내 스마트폰에서 테스트 해봤는데 MediaMetadataRetriever 에서 Runtime 오류 발생

    - 디버깅 결과 손상된 영상 정보를 가져오려할때 발생함

    - 예외처리로 손상된 영상 정보일 경우에는 임의로 length 0 대입

 

 

- 데이터 삽입 과정에서 2342개의 파일에서 723개의 mp4 파일정보를 데이터베이스에 삽입하는데에 15초가 걸림

    - 데이터베이스의 데이터 개수가 없을 때도 이 정도이면 데이터 개수가 많아질 수록 시간이 비약적으로 길어질 듯

    - 액티비티에서 해당 과정 수행 시 액티비티 검은 화면으로 마비됨

    - 메인 thread에서 모든 작업 수행 불가 -> Asynctask로 수행해야할 필요성을 느낌

 

- 데이터베이스에 50개의 값을 대상으로 태그 검색시 1초가량 걸림

    - 이 작업도 Asynctask 로 전환 필요

    - 태그 검색 알고리즘 자체 개선 필요

 

- 실용성을 위해서는 전반적인 알고리즘 최적화가 필요해보임

    - 태그 검색 시 String.contains()로 String 포함 여부 검사하는 건 무조건 아닌 것 같다. 좀 더 나은 방법이 있을 듯 (태그를 정수 형태로 변환하여 관리 등, 데이터베이스 레벨에서 String 포함 여부 검사도 한번 테스트해보자)

    - 앱을 실행 시 마다 이미 파일 경로의 데이터들 전부를 대상으로 데이터베이스에 있는지 없는지 확인 작업이 필요할까? 해시값을 이용하는 등의 방법으로 변화가 감지될 때만 변화된 파일들을 대상으로 작업 수행(새로운 파일, 변화된 파일)

 

 

내일 할 일

- 데이터베이스 레벨에서 String 포함 여부 검사로 성능 개선 테스트

- 내일 참고할 링크들

gap85.tistory.com/entry/SQL-%ED%8A%B9%EC%A0%95-%EB%AC%B8%EC%9E%90%EA%B0%80-%ED%8F%AC%ED%95%A8%EB%90%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EA%B2%80%EC%83%89

 

[SQL] 특정 문자가 포함된 데이터 검색

● SELECT [컬럼명] FROM [테이블명] WHERE [컬럼명] LIKE '특정문자열%' ▶ '김' 으로 시작하는 사람을 모두 조회  - SELECT id,name FROM member WHERE name LIKE '김%'  ID NAME 1  김건모 2  김유리 ▶ ..

gap85.tistory.com

recipes4dev.tistory.com/120

 

안드로이드 데이터베이스(DB) 프로그래밍 2. [SQLiteDatabase] (Android Database 2)

1. 관계형 데이터베이스(Relational Database) 지난 글 [안드로이드 데이터베이스(DB) 다루기 1 - 관계형 데이터베이스]에서 관계형 데이터베이스(Relational Database)의 기본 개념과 용어, 그리고 데이터베

recipes4dev.tistory.com

select 쿼리 구현

'안드로이드 앱 개발 프로젝트1' 카테고리의 다른 글

9일차 - 데이터 삽입 알고리즘 최적화  (0) 2021.01.19
8일차  (0) 2021.01.18
6일차  (0) 2021.01.17
5일차  (0) 2021.01.14
4일차  (0) 2021.01.13