2012-06-24 2 views
4

대부분의 경우 데스크톱 응용 프로그램을 디자인 할 때 주 응용 프로그램을 편리한 목적으로 싱글 톤으로 만드는 것을 좋아합니다. 메인 애플리케이션 레퍼런스 전체를 전달하지 않고도 애플리케이션의 데이터와 메소드에 쉽게 액세스 할 수 있습니다.Activity를 싱글 톤으로 취급하는 것이 안전합니까?

public class MainFrame extends javax.swing.JFrame { 
    // Private constructor is sufficient to suppress unauthorized calls to the constructor 
    private MainFrame() 
    { 
    } 

    /** 
    * MainFrameHolder is loaded on the first execution of Singleton.getInstance() 
    * or the first access to MainFrameHolder.INSTANCE, not before. 
    */ 
    private static class MainFrameHolder { 
     private final static MainFrame INSTANCE = new MainFrame(); 
    } 

    /** 
    * Returns MainFrame as singleton. 
    * 
    * @return MainFrame as singleton 
    */ 
    public static MainFrame getInstance() { 
     return MainFrameHolder.INSTANCE; 
    } 
} 

그러나보기의 안드로이드 플랫폼의 관점에서, 나는 더 이상 확인 내가 MainActivity의 창조를 통해 직접 제어 할 수 없기 때문에, 그렇게/올바른 안전 여부를 생각하지 않습니다.

  • 실행 모드가 standard 될 것입니다 내가해야 할 것 오전 MainActivity입니다.
  • MainActivity의 인스턴스가 생성되는 유일한 시간은 사용자가 애플리케이션 아이콘을 탭한 경우입니다. 의미는 시작할 수있는 유일한 방법은 AndroidManifest.xml의 <application> 태그에 지정되어 있습니다. MainActivity.apk 내에 다른 Java 코드가 없어야 MainActivity을 시작할 수 있습니다.

public class MainActivity extends Activity { 
    public static MainActivity INSTANCE = null; 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     assert(INSTANCE == null); 
     INSTANCE = this; 
    } 
} 

답변

6

응용 프로그램을 처음 시작할 때 한 번만 실행해야합니다, 또는 전체 앱 공유 데이터를 저장하기 위해 일부 초기화 코드를 가지고 있기 때문에 당신이 그렇게 할 이유가있는 경우 onCreate()Application의 하위 클래스 메소드가 더 나은 장소 일 수 있습니다. 안드로이드는 애플리케이션 당 하나만 존재할 것을 보장하기 때문입니다. 방법에 대한 설명은 this 링크를 참조하십시오.

+0

링크를 제공해 주셔서 감사합니다. 또한 다음 링크에서 매우 유용한 정보를 찾을 수 있습니다. http://stackoverflow.com/questions/2002288/static-way-to-get-context-on-android –

관련 문제