2011-09-21 3 views
4

내 앱에 추가하는 모든 활동에 대해 활동 초기화시 사용되는 유사한 코드가 많이 있음을 눈치 챘을 것입니다. 이 비슷한 코드를 래핑하는 정적 메서드가있는 도우미 클래스가 나아갈 길입니다.Android의 도우미 클래스에 대한 규칙이 있습니까?

내가 처음 싱글 톤 클래스를 생각했습니다. 정적 메서드/변수를 추가하여 응용 프로그램에서 사용할 수 있습니다. 나는 Android 애플리케이션에서 이것이 어떻게 작동하는지 실제로 보려고하지 않았습니다. 조금 더 살펴보면 Application을 확장하는 클래스를 만드는 방법에 대해 알게되었습니다. 이를 위해 간단한 테스트를 수행했습니다.

public class MyApp extends Application { 
    public static String DEMOTEXT = "WORKING!"; 

    public static void ShowToast(Context context, String text) { 
     Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); 
    } 
} 

MyApp.ShowToast(this, MyApp.DEMOTEXT); // Placed on onCreate of some Activity 

예상대로 작동합니다. Android를 사용하는 방법인가요? 더 좋은 대회입니까? 이 작업을 수행 할 때 고려해야 할 사항은 무엇입니까?

그런데 문자열에 final 키워드를 사용해야합니까? 방법은 어떨까요?

편집 : 난 그냥이 글을 읽을 :

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

http://developer.android.com/reference/android/app/Application.html

나는 다음 싱글을 사용해야합니까?

답변

3

Application은 주로 전역 응용 프로그램 초기화에 사용됩니다. 자신 만의 클래스를 만들고 Application.onCreate()을 오버라이드하고 정적 애플리케이션 데이터를 초기화하십시오.

망가은 AndroidMainfest.xml에 선언하는 것을 잊지 :

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name" 
    android:name="your.package.path.to.MyApp"> 

정적 헬퍼 클래스는 그런 식으로 이루어집니다.
약식은 첫 번째 위치에서 소문자를 사용하므로 MyApp.showToast(...)입니다.

다른 위치에서 조정을 피하려면 문자열에 final을 사용합니다 (내용이어야하므로).

// this would allow ... 
public static String DEMOTEXT = "WORKING!"; 

// ... to do this somewhere else 
MyApp.DEMOTEXT = "NOT WORKING!" 
1

예, 싱글 톤만 사용하십시오. 이 경우에는 메서드가 정적 인 경우에는 싱글 톤이 필요하지 않습니다. 정적 메서드가있는 클래스입니다.

+1

그러나 싱글 톤으로 인해 클래스가 인스턴스화되지 않을 수도 있습니다. 필요한 경우 ... –

2

저는 이것을 시도하지 않았지만 당신도 이와 같이 할 수 있어야한다고 생각합니다.

public class MyActivity extends Activity { 
    private static final String DEMOTEXT = "WORKING!"; 

    @Override 
    public void onCreate(Bundle bundle) 
    { 
     super.onCreate(bundle); 
     Toast.makeText(this, DEMOTEXT, Toast.LENGTH_SHORT).show(); 
    } 
} 

이제 초기화를 사용해야하는 모든 활동에 대해 기본 활동 클래스를 확장 할 수 있습니다.

public class SomeActivity extends MyActivity { 
    ... 
    // Should display the toast on create 
    ... 
} 
+0

내 코드는 예제입니다. 실제 메서드가 인수를 가지며 실제 Activity에 의존하므로이 작업을 수행 할 수 없습니다. 따라서 기본 클래스를 만들 수는 없습니다. –

관련 문제