intent로 전달하는 방식이 아닌 전달하고자 하는 데이터를 static 으로 두어 저장하여 다음 액티비티에서 이걸 쓸 경우..
이러한 방식의 단점은 뭐가 있을까요..
예전에 임시적으로 사용해본적이 있는데 일단 사용시 크게 문제는 없었습니다만.. 많이 테스트해본게 아니라서요..
현재 액티비티간 데이터 전달에 문제가 생겨버렸습니다.
액티비티간 전달하는 데이터에 용량 제한이 있다는걸 처음 알았습니다.. 100kb까지더군요..
그 이상 넘어가니 트랜잭션 오류 나면서 이전 액티비티로 강제 이동되버리는 현상을 발견했습니다.
전달하고자 하는 데이터가 이미지라 ;; 어쩔수 없이 용량이 큽니다.
그래서 static 데이터로 전달할까 하는데.. 문제가 있을까요..
전 일단 그런적이 없었지만.. 이상하게 안드로이드에서는 static으로 잡으면 가끔식 다른 어플 실행하다 다시 돌아올때
static 데이터가 날라가버리는 현상이 있다는걸 들은적이 있습니다..
Activity는 하나의 독립된 실행 단위 이기 때문에
static 변수는 언제 어디서든 동시 다발적으로 여려곳에서 접근 가능하다고 가정해야 합니다.
이럴 때의 동기화 문제도 고려해야 겠지요
음.. 현재 하려는 작업이 DB에서 이미지를 불러오는 작업인데 이 이미지를 여러 액티비티에 걸쳐서 사용합니다.
일단 DB 배포와 같은 몇가지 문제때문에 이미지 파일을 따로 만들지 않고 byte[] 로 이미지를 아예 DB에 추가했습니다.
한번에 불러오는 이미지가 약 20개 정도 되고 이것들을 액티비티 이동간 계속 DB에서 호출하고 Bitmap 파일로 변환하는게 약간의 딜레이가 생겨
처음 한번 불러오고 여러 액티비티에서 이걸 사용하려고 했습니다.
이미지 파일로 만들어 사용하고 마지막에 지우는 작업을 하려니 만약 중간에 다른 오류가 생겨 어플이 강제 종료되었을때 이미지 파일이 남는문제도 있을수 있겠고.. 불가능하지만 무엇보다 최대한 이미지 유출을 안되게하고 싶습니다..
동네가수님 말씀대로라면 static을 사용했을때 중간에 데이터가 날라가는것은 어플이 완전히 종료되었을 경우면.. static으로 사용해도 별다른 문제가 발생하진 않을것 같네요.
하이앤님께서 말씀하신 동기화문제는 일단 제 생각에는 다행히 현재 구현하는 내용에서는 별 문제가 없을것 같습니다. 처음 저장만 해두고 그냥 불러쓰는 문제라서요 ㅎ
답변해주셔서 감사합니다. 덕분에 많이 배웁니다. ^^
이미지 전달은 해당 Bitmap을 파일로 저장해서 해당 파일의 Uri를 던져 주는방식이 좋겠습니다. 그리고 처리 하였으면 해당 파일을 지워주면 되겠죠
다른 어플을 실행하다 다시 돌아 올때 static 데이터가 날아가는 것은 다른어플을 실행하고 있던 도중 해당 어플의 우선순위가 낮아지고 시스템이 지원을 필요로 하여 어플을 종료하고 자원을 모두 반납해서 그렇습니다.
static 의 단점이라고 한다면 자바에서는 메모리 해제를 위해서 스택에서 사라진 것들을 가비지컬렉션이 청소합니다. 하지만 static 같은 경우는 어플이 처음 실행될때부터 참조를 가지고 있고 이것은 어플이 종료되거나 혹은 개발자 스스로가 null 값을 넣어주기 전까지 가비지컬렉션이 청소할 대상에 들어가지 않습니다.
메모리릭이 일어나기 제일 쉬운 코드 구조가 static을 남발한 구조 입니다. 조심해서 다루어야 하죠