2013-02-20 3 views
1

MainActivity는 :Android 클래스 디자인 - 내가 보여줄 때마다 내 활동의 대화 상자 클래스를 다시 인스턴스화해야합니까?

GeneralDialogFragment history_dialog = new GeneralDialogFragment(); 
public void showHistory(View view) { 

    Bundle bdl = new Bundle(1); 
    bdl.putString("dialog_type", "history"); 

    history_dialog.setArguments(bdl); 
    history_dialog.show(getSupportFragmentManager(), null); 
} 

이 코드는 내 활동 안에 살고있다.

는 지금, 나는 내가 showHistory() 함수 내부 또는 외부

GeneralDialogFragment history_dialog = new GeneralDialogFragment(); 

정의를 넣어할지 여부를 방황했다?

다른 점은 무엇입니까? 나는 그것을 외부에두면 메모리를 절약 할 수 있는가? (한번만 인스턴스화 했는가?)

답변

1

당신이하는 일은 주로 프래그먼트가하는 일에 달려있다. 새로운 Fragment 객체를 만드는 오버 헤드는 아주 적지 만 만들려는 객체 수에 따라 더할 수 있습니다. DialogFragment이 정적이고 매초마다 팝업이 나타나면 (왜 그렇게할까요?!?!), 그럴 가치가 있습니다. DialogFragment이 매분 갑자기 나타나면 최종 사용자는 매번 개체를 재생성하는 중임을 알 수 없습니다.

일반적으로 말하자면 Android (Google)는 지연로드 방식을 권장합니다. 따라서 해당 메서드의 시작 부분에 객체를 만들고 show()을 호출하면 객체에 대한 참조가 손실됩니다. 응용 프로그램의 FragmentManager에도 여전히 참조가 있으므로 메모리에 남아 있습니다. dismiss()에 전화하면 Fragment이 제거되고 메모리가 차지하는 메모리가 가비지 수집됩니다. 이 방법을 사용하면 약간의 CPU 오버 헤드가 있지만 메모리 사용을 최소화 할 수 있습니다.

조각에 할당해야 할 리소스가 많은 경우 예외입니다. 의 경우 인 경우 리소스를 한 번로드 한 다음 유지하는 것이 좋습니다. 예를 들어 이미지는 디코딩하는 데 오랜 시간이 걸릴 수 있기 때문에 캐시가 잘됩니다. 그것들은 조각 자체에 저장 될 필요는 없지만 큰 이미지가 메모리에 남아 있으면서 새로운 조각이 생성 될 때 그것을 전달하는 것이 좋을 것입니다.

편집 : 그냥 보조 노트, 당신은 참조가 유지 될 필요가 있다고 결정하는 경우, 그것은 확인 대화 상자가 이미 표시되어 있지 않은지 확인하기 위해 수표를 가지고 좋은 것입니다. Activity에 연결된 Fragment에서 setArguments()을 호출했기 때문에 대화 상자가 현재 활성화되어있는 경우 showHistory() 번으로 다시 전화하면 앱이 다운됩니다.

0

showHistoryMethod()를 호출하는 횟수에 따라 다르며 showHistory() 메서드 외부에서 history_dialog 객체가 필요합니다.

따라서 객체가 showHistory() 메서드 외부에서 필요하지 않으며 Activity 중에 한 번만 호출되거나 전혀 호출되지 않을 것이라고 가정하면 showHistory() 메서드 안에 배치합니다.

외부에 배치하면 GeneralDialogFragment 인스턴스가 기본 활동 시간 동안 살아납니다. 반면에 GarabageCollector가 showHistory 메서드 내부에 있으면 메모리가 필요 없게됩니다.