2017-06-13 16 views
2

私は、シングルトンパターンを実装し、それに静的オブジェクトをバインドするAndroidアプリケーションクラスを賞賛しました。Androidアプリケーションで静的メンバーを使用していますか?

public class App extends Application 
{ 
    public static BigObject myObj; 

    private static App instance; 

    public static App getInstance() 
    { 
     return instance; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     instance = this; 
     myObj = new BigObject(this); 
    } 

} 

は、性能、メモリリークまたは多分例外、のgetInstance()について、この実装に問題があります。myObj.something()フォームBroadcastReceiverまたはサービスと呼ばれていますか?

+0

私はこれにも良い答えを見ることに興味があります。 Android Studioは、 'Application'クラスの' static'変数についてもメモリリークについて警告しています。 – Vucko

+0

はい私もまた、他の一方では、stackoverflowや様々なブログの実装がたくさんあります。 – glethien

+1

staticとgetInstanceを使用する理由コンテキストオブジェクトがある場所であれば、アプリケーションオブジェクトにアクセスできます。だから、あなたはbigObjectを単純なフィールドにし、getterを使ってそれにアクセスします。 –

答えて

1

私が見ている唯一の欠点は、多少醜いコードですが、依存性注入を使う方が良いでしょう。私は分かりませんが、OSがApplication :: onCreateの後に他のすべてのコンポーネントが起動されることを保証する場合は、問題はありません。非メインスレッドでさえ、bigObjectの値をキャッシュしません。しかし、onCreateの後にbigObjectの値を設定したい場合や、作成に時間がかかる場合は、データの競合や起動の遅さに問題が発生する可能性があります。

1

この実装では問題はありません。 Applicationオブジェクトは基本的にシングルトンです。

+0

はい、Androidスタジオはアプリケーションクラスに静的オブジェクトを持つことについて警告していますが、基本的にシングルトンであるシングルトンをアプリケーションクラスに実装するのは悪いと感じています。 – glethien

関連する問題