2017-09-24 17 views
1

이전에는 응용 프로그램에 대한 활성 데이터베이스 연결을 유지하기 위해 서브 클래스를 Application으로했습니다. 그러나 this SO answerApplication에 따르면 UI 스레드에서 실행되므로 데이터베이스 액세스에 확실히 사용하지 않아야한다고 생각합니다. 또한 Xamarin Application docs (및 Android의 해당 사항) :Android.App.Application 서브 클래 싱을 피하는 방법

일반적으로 응용 프로그램을 서브 클래스 할 필요가 없습니다. 대부분의 경우 정적 싱글 톤은 모듈화 된 방식으로 동일한 기능을 제공 할 수 있습니다. 싱글 톤에 글로벌 컨텍스트가 필요한 경우 (예 : 브로드 캐스트 리시버를 등록하는 경우), 싱글 톤을 처음 구성 할 때 내부적으로 Context.ApplicationContext을 사용하는 Context을 검색 함수에 제공 할 수 있습니다.

나는 내가 응용 프로그램 자원에 대한 정적 액세스의 일종을 유지 관리하는 데 사용할 수있는 무언가가되도록 Context을 이해 생각하지만 문서에는 예는 없다 나는 전에이 상황이 발생하지했습니다. 누구든지 위의 설명을 설명하고 그들이 완전히 실종되지 않는 한 응용 프로그램 자원을 유지하기 위해 Context을 사용한 방법을 관련시킬 수 있습니까? 링크 또는 예를 들어 주시면 감사하겠습니다.

답변

-1

내가 찾고있는 droid 답변을 찾은 것 같습니다.

데이브 스미스가 문서에 언급 된 바와 같이 "정적 싱글"의 simple example 제공 한 것은 위의 노트 :

public class CustomManager { 
    private static CustomManager sInstance; 

    public static CustomManager getInstance(Context context) { 
     if (sInstance == null) { 
      //Always pass in the Application Context 
      sInstance = new CustomManager(context.getApplicationContext()); 
     } 

     return sInstance; 
    } 

    private Context mContext; 

    private CustomManager(Context context) { 
     mContext = context; 
    } 
} 

Context 자체가 CustomManager의 수명에 기여하지 않는 - 단순히 때문에 자사의 존재 정적 싱글 톤 그 자체의 성질. context.getApplicationContext() (Xamarin Context.ApplicationContext)이 제공하는 Context은 싱글 톤이 필요하면 응용 프로그램 Context에 액세스하기위한 단순한 수단입니다.

this SO question and its top two answers으로 정교화 된 것처럼 실제 질문은 많지 않습니다.하지만 글로벌 응용 프로그램 데이터를 싱글 톤으로 제공하려면 어떻게해야합니까? 프레임 워크의 확장으로 제공된 Application 싱글 톤 또는 당신이 이전에 만든 것을 사용하거나 사용하지 않을 수도있는 추가적이고 개별적인 싱글 톤.

필자는 결국 Application을 서브 클래 싱하는 것에 만족한다고 생각합니다. Application 클래스의 일부 변형에 응용 프로그램 데이터를 저장하는 것이 직관적으로 더 직관적입니다. 게다가, 나는 일반적으로 싱글 톤 (singleton)을 만드는 것에 대한 OOP의 불안한 점을 가지고 있기 때문에, 기존의 것을 사용하는 것보다 내 자신을 만드는 것이 더 안전하다고 느낀다. 이 싱글 톤은 프레임 워크에 의해 관리되기 때문에 본질적으로 글로벌 변수 (boo hiss)로 바뀌는 전형적인 불행에서 안전성을 보장하지는 않지만 최소한 내 자신을 롤링하는 것보다 조금 안전합니다.

P. 다시 : UI 스레드에서 실행되는 Application을 사용하면 정적 싱글 톤을 사용하면 아무런 도움이되지 않습니다. 어쨌든 Application을 사용하기 때문에 다시 한 번 부탁합니다. 나는 아마 here이라는 조언을 따르고 프로세서가 많은 작업을 위해서는 AsyncTask을 사용한다고 생각한다.