2012-01-05 3 views
1

안녕하세요 저는 퀴즈 애플리케이션을 만들고 있는데 하나의 액티비티에서 최대 100 개의 "Question"객체까지 ArrayList를 전달해야합니다. Question 객체에는 약 6 개의 매개 변수가 있습니다. 아주 작은 문자열입니다. 나는 이것을하기위한 방법을 찾고 있었고 언급 된 것들 중 하나는 그것을 하나의 클래스에서 public static 변수로 선언 한 다음 다른 클래스에서 그것을 참조하는 것이었다. 나는 다음에 대해 궁금 해서요 :Android의 대용량 정적 변수

  • 내가 그것을 사용하거나 그냥 변수를 선언하기 전에 ArrayList를 "을 인스턴스화"해야합니까? 마찬가지로 : 나는 다른 활동에있을 때

    ArrayList<Question> QuestionBank = new ArrayList<Question>(); 
    

    또는

    ArrayList<Question> QuestionBank; 
    
  • 내가 한 활동이 변수를 선언하고있어 경우는 어떻게 사용할 수있어 무엇입니까? 그것이 선언 된 활동이 계속 운영되고 있습니까?

  • 이것은 매우 메모리를 소비하는 방법입니까? 보다 효율적이지만 비교적 직선적 인 방법이 있습니까?
  • 변수 사용을 마친 후에 변수 null을 선언하면 이전에 사용 된 모든 공간을 비 웁니다.
+6

귀하의 선언 중 어느 것도 유효하지 않습니다. 귀하는 이름을 지정하지 않았습니다 ... –

+0

오, 안돼! 죄송합니다 이름을 지정하는 걸 잊어 버렸습니다. 실제로 커스텀 ArrayLists를 작성할 때 실제로 실수를합니다 ... – user1058210

답변

4

답변 : 경우 "사용"전에

  1. 당신은 그것을 인스턴스화해야합니다. "사용"이란 말은 메서드를 호출하는 것을 의미합니다. 첫 번째 또는 두 번째 활동을 인스턴스화하는 위치는 중요하지 않습니다.

  2. 정적 필드는 클래스 인스턴스를 통하지 않고 클래스를 통해 액세스되기 때문에 클래스 필드라고도합니다. 결과적으로 정적 필드의 경우 항상 인스턴스가 하나뿐입니다. MyClass.someField은 전체 앱에서 사용할 수 있으며 그 중 하나만 있습니다.

  3. 파일의 데이터 (플래시 저장소 사용)와 달리 메모리 (RAM)를 사용합니다. 그러나 어떤 시점에서는 메모리에 저장해야하므로 어떤 경우에도이 메모리를 사용합니다.

  4. 예, 일시적으로 만 필요하면 더 이상 필요 없게되고 메모리가 해제되면 (결국 gc가 실행될 때) 필드를 null으로 설정할 수 있습니다.

은 BTW, Application 클래스라는 이름의 정적 변수

  • 비아와 Intent.setExtra()/Intent.getXXXExtra()
  • 클래스를 통해 응용 프로그램 : 활동 사이

    1. 패스 데이터의 내부 데이터를 공유 할 수있는 몇 가지 옵션이 있습니다 앱 라이프 사이클 전반에 걸쳐 단일 인스턴스이며 살아 있습니다.
    2. Shared preferences
    3. Database
    4. 난 당신이 다른 하나 개의 활동에서 정적 데이터를 읽고 싶은 생각하지 않는다 Internal storage
  • +0

    피터와 같은 완벽한 답변을 주셔서 감사합니다! – user1058210

    0

    , 그것은 의심 할 여지없이 문제/부작용으로 이어질 것입니다 솔루션입니다.활동을 가능한 한 분리 된 상태로 유지하는 것이 좋습니다.

    위의 제안과 같이 가장 좋은 해결책은 Questions 클래스를 Parcable으로 만드는 것입니다. 그런 다음 활동 Intent.setExtra 방법으로 데이터를 설정하십시오. 다른 활동이 시작될 때 Intent에서 질문을 읽으면 모든 데이터가 활동의 수명주기 내에서 잘 어울리며 활동이 이러한 방식으로 재사용 될 수 있습니다.