2011-12-19 2 views
0

상황 :
안드로이드 응용 프로그램의 주요 활동을 종료 할 때 반환 할 때, 나는 배열이 이미 채워지지 않도록 (배열에 그들에게 데이터를 삭제하기 위해 를 액티비티의 생활 인스턴스의 메소드를 호출 할 앱에). OtherActivity.java에서 MainActivity.java
현재 활동중인 인스턴스가 있는지 여부를 확인하는 방법은 무엇입니까?

// ... 
@Override 
public void onDestroy() {  
    super.onDestroy(); 
    // call method to clear an array list of its data 
    // NullPointerException here if OtherActivity has no current living instance 
    OtherActivity.clearAllData();   
} 

에서


// ... 
private static ArrayList <String> myStringCollection; 
// ... 
public static void clearAllData(){ 
    if(myStringCollection.size() > 0){ 
    myStringCollection.clear(); 
    Log.d(TAG, "clearing data in OtherActivity"); 
    } 

} 

질문 : 우리가 OtherActivity가 현재 살고있는 인스턴스를 너무 가지고 있는지 어떻게 알 수
우리가 안전 할 수 있다고 OtherActivity.clearAllData()에 대한 호출?

응용 프로그램을 종료하고 복귀 후 일부 ArrayLists 여전히 그들의 오래된 데이터를 가지고, 그 결과 새로운 데이터 (중복)가 위에 쌓인됩니다 : 코드가해야 할 시도 무엇

. 이 코드는 주 활동의 onDestroy()에있는 ArrayLists에서 데이터를 지우려고하므로 나중에 앱으로 돌아갈 때 이전 데이터가 없어집니다.

답변

2

코드에서 현재 정적 변수를 사용하고 있습니다. 정적 변수는 클래스의 실제 인스턴스가 아닌 ClassLoader에 첨부됩니다. 이것은 위에서 수행 한 작업을 수행하기 위해 유효한 실제 인스턴스가 실제로 필요하지 않음을 의미합니다. 변수가 초기화되었고 사용자는 괜찮음을 보장하기 위해 myStringCollection != null과 같은 체크를 사용하십시오.

참고 : 정적이 아닌 변수에 실제로 액세스하려는 경우 명확히하십시오.

+0

피드백에 감사드립니다. 나는 그것을 시도 할 것이다. 클래스 메서드를 사용하여 다른 활동의 메서드를 호출하고 데이터를 앞뒤로 전달합니다 (아마도 가장 좋은 방법은 아니지만 ...) – sean

+0

업데이트 : NullPointerException이 중지되었지만 이후에 배열 데이터를 지우는 데 실패했습니다. app quit .. 문제는 질문의 범위에서 벗어나고 있으므로 답변을 수락하고 접근 방식을 다시 생각해 보겠습니다. 다시 한번 감사드립니다. – sean

+0

나는'SharedPreferences'를 살펴볼 것입니다. 클래스간에 데이터를 전달하는 쉬운 방법입니다. 또한,'Intents'에'Extras'를 추가하는 것은 데이터가 영속적이지 않기를 원할 때 정말 도움이 될 수 있습니다. – Grimmace

관련 문제