2011-08-13 4 views

答えて

3

はい。たくさんありますが(下記参照)、それはまったくお勧めできません。カスタマイズされたコンストラクタを使用してスレッドを作成するときは、コンテキストを渡す方がよいでしょう。

例(再び - が本当にをdiscourged):活動の

:スレッドで

class SomeActivity extends Activity { 
    public static Context ctx; 

    protected void onCreate(Bundle bundle) { 
     // ... 
     ctx = this; 
     // ... 
    } 

    public static Context getLastSetContext() { 
     return ctx; 
    } 
} 

Context ctx = SomeActivity.getLastSetContext(); 
+0

しかし、その代わりのApplicationContextを使用すると、メモリリークが右作るべきではないのですか?その問題は何ですか? – Addev

+0

これは単純なケースではうまくいくかもしれませんが、アプリケーションが大きくなるにつれて、あなた自身の欠点、インスタンスを持つことが保証されていない静的フィールドへの依存性、変更される可能性がありますあなたのアプリケーションを拡張するように)安全ではありませんIMHO、あなたはまだそれをやりたい場合は、私はあなたを止めるものではありません。 – MByD

+0

それは確かに落胆されるだけでなく、大きなメモリリークのためのレシピです。私は決して決してそれをすることをお勧めします。 – sstn

3

インスタンスを作成するためにGoogleによって推奨される方法アプリケーションクラスの ドキュメントから:

"通常、アプリケーションをサブクラス化する必要はありません。ほとんどの場合、スタティックシングルトンはよりモジュラーな方法で同じ機能を提供できます。シングルトンにグローバルコンテキストが必要な場合(ブロードキャストレシーバを登録する)、それを取得する関数は、最初にシングルトンを構築するときにContext.getApplicationContext()を内部的に使用するContextを与えることができます。

参照 1 2

関連する問題