2014-04-11 7 views
0

getApplicationContext()를 사용하여 ListActivity의 하위 클래스에서 Context를 얻을 수 있음을 알고 있습니다. 하지만 PublicPar는 공용 클래스이므로이 클래스에서 Context를 가져 오는 방법은 무엇입니까?공통 클래스에서 컨텍스트를 가져 오는 방법은 무엇입니까?

public static void SetNotification(Context context) {  

} 

하는 설정하지 기억하십시오 : 당신이 당신의 PublicPar 클래스와 같은 공통 (도우미 형) 클래스가있는 경우

public class SMSMain extends ListActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) {   
     Context my=getApplicationContext();   
    } 

} 



public class PublicPar { 
    public static void SetNotification(){  

    } 
} 
+2

생성자에 하나를 제공합니까? – panini

+0

@panini처럼. 정적 변수에 저장하지 마십시오. –

+0

@panini 그건 좋은 생각이 아니야. 문맥이 너무 쉽게 누출됩니다. – Szymon

답변

1

, 당신이 할 수있는 최선은 각 방법에 대한 매개 변수로 상황을 전달하는 것입니다 이 문맥은 누설을 피하기 위해 어떤 종류의 클래스 변수 (PublicPar)에 대해서도 마찬가지입니다.

+0

감사! 이 코드를 수행 할 수 없다는 것을 의미합니까? public class PublicPar {public static Context myContext; } PublicPar.myContext = getApplicationContext(); 누출되는 이유는 무엇입니까? 그리고 안드로이드 시스템이 유출되는 것을 피할 수 있다고 생각합니다. 맞습니까? – HelloCW

+0

클래스를 상속받은 클래스 외부의 컨텍스트에 대한 참조를 유지하면 누출 될 수 있습니다. 이는 클래스에 대한 참조를 보유하게되며 가비지 수집되지 않음을 의미합니다. 또한 정적 변수를 사용하면 하나의 값만 있으므로 다른 컨텍스트를 쉽게 섞을 수 있습니다. – Szymon

0

시도해보십시오. 작동해야합니다 :

public class SMSMain extends ListActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) {   
     // Context my=getApplicationContext(); 

     new PublicPar().SetNotification(SMSMain.this) 
    } 

} 



public class PublicPar { 
    public static void SetNotification(final Context context){  

       // You can proceed with using the context here. 
    } 
} 
0

생성자 인수의 일부로 컨텍스트를 전달하지 않으려는 경우 응용 프로그램에서 정적 메서드를 노출 할 수 있습니다.

public class MyApplication extends Application { 
    private static MyApplication myinstance; 
    public MyApplication() { 
     myinstance = this; 
    } 

    public static Context getAppContext() { 
     myinstance.getApplicationContext(); 
    } 
} 
관련 문제