2012-07-18 3 views
0

Android 마켓에 내 앱을 넣었습니다. 이제 업데이트하고 싶지만 안드로이드가 내 앱의 메모리를 관리하는 방법을 더 잘 이해하기 전에 특히 나는 이런 식으로 예를 들어, 내부 메모리를 사용 :Android 마켓 업데이트 후 내부 메모리 관리

File f = context.getFileStreamPath(NAME_FILE); 
if (f.exists()){ 
   FileInputStream stream = context.openFileInput(NAME_FILE); 
   ObjectInputStream din = new ObjectInputStream(stream); 
   myobject = (MyObject) din.readObject(); 
}else{ 
   FileOutputStream stream = ctx.openFileOutput(NAME_FILE, Context.MODE_PRIVATE); 
       ObjectOutputStream dout = new ObjectOutputStream(stream); 
       dout.writeObject(myobject); 
       dout.flush(); 
       stream.getFD().sync(); 
} 

그리고 좀 직렬화 객체를 저장하기 위해이 파일을 사용했다. 새 버전에서는 이러한 개체의 구조를 변경하여 내 질문에 :

새 업데이트에, 안드로이드는이 파일을 삭제하고 내 응용 프로그램이 객체 (else 절)를 파일에 저장하려고 할 때 생성합니다 새로운 빈 파일? 안드로이드는이 파일을 유지하고 내 응용 프로그램이 파일 (if 절)의 객체를 맞추려고 할 때 충돌이 발생합니다.

Tnx 미리. Framentos

+0

android는 /data/namespace.of.app/에 파일 시스템에 쓰는 모든 파일을 넣습니다. 패키지 이름이나 파일 이름을 변경하지 않으면 f.exists()에서 모두 true로 되돌아갑니다 "이 파일이 존재합니까?"라는 질문을합니다. 그런 다음 객체를 읽고 MyObject 유형으로 다시 직렬화하려고 시도합니다. – ewanm89

+0

[이 페이지에서 "버전 관리"에 대한 섹션 검색 (http://java.sun.com/developer/technicalArticles/Programming/serialization/). 두 가지 요소에 따라 달라집니다. 기존 직렬화 된 클래스와 새 직렬화 된 serialVersionUID가 있어야하며 변경 사항은 "호환 가능"해야합니다. 즉, 문제없이 필드를 제거/추가 할 수 있습니다. 하지만 아마 타입을 바꿀 수는 없습니다. – tiguchi

+1

@ ewanm89 : * "android는 /data/namespace.of.app/"*에 파일 시스템에 작성한 모든 파일을 저장합니다. 반드시 그렇지는 않습니다. 특정 제조업체의 특정 기기에 대한 특정 버전의 Android에 대한 절대 경로를 절대 사용하지 마십시오. – Squonk

답변

0

새 업데이트에서 Android에서이 파일을 삭제하겠습니까?

아니요, 이전에 설치된 앱을 업데이트해도 이전 저장된 데이터가 삭제되지 않습니다.

데이터 구조가 변경된 경우 새 버전은 이전에 저장된 데이터의 존재를 감지하고 새 (업그레이드 된) 버전이 처음 실행될 때 삭제하거나 다시 만들어야합니다.