Flex、AIR、Java、Androidなど

5月24日 2009

AndroidのwidgetでSingletonを使うと挙動がおかしい?

Posted by: tachibana In: Android| プログラミング

私はAndroidのアプリを作る際にはユーザー用の設定はSharedPreferenceに入れ、Preference用のアクティビティ等とSharedPreferenceのやり取りを専門に行うクラスをSingletonで用意しています。

SharedPreferenceはcontext.getSharedPreferencesで取らなければならないのでSingletonは

private static UserData instance;
    private static Context context;

    public static synchronized UserData getInstance(Context c)
    {
        if(instance == null)
        {
            UserData.context = c;
            instance = new UserData(UserData.context);
        }
        return instance;
    }

private UserData(Context c)
{
・
・
・
}

こっちのパターンで実装し、ウィジェットのonCreateで最初にgetInstsnceを呼んでいるのですが、このインスタンスが頻繁にnullになりプライベートコンストラクタが呼ばれてしまうことがあります。

それだけならまだいいのですが、インスタンスは存在しているのにも関わらずプロパティがnullになっている時もあり、他の箇所でNullPointerExceptionを発生させアプリが強制終了してしまうこともあります。

widgetには全く関係の無いブラウジングなどの操作をしている時にダイアログが出てきたりしますのでこれはたまりませんし。ログには何の有益な情報も記録されませんし。

現在は例外処理をところどころに入れて何とか凌いでいますが、インスタンスやプロパティが想定できない場面で勝手にnullにされると困りますね。

メモリの開放を意識しなくて良い分、知らないうちに開放されていたりすることもあるんだなあということを始めて体験しました。

再び一から書き直してみることにします。

EasyFreeAds Blog News Facebook Twitter Myspace Friendfeed Technorati del.icio.us Digg Google Yahoo Buzz StumbleUpon

No Responses to "AndroidのwidgetでSingletonを使うと挙動がおかしい?"

Comments are closed.

Categories

 

2017年7月
« 4月    
 12
3456789
10111213141516
17181920212223
24252627282930
31  

About

Author: tachibana

  • ちょっとしたことはTwitterに書いています。こっちはアプリの公開等の時に更新されます。
  • 最近はもっぱらJavaとObjective Cです。AS3は飽きました。
  • スクリプト言語ではPerlが好きでしたが最近はGAE/Jで何でもやってます。
  • Linuxは自宅サーバー建てるのがやっとのレベルです。前の会社で何日も徹夜してやったのはいい思い出です。
  • アプリへのご要望などご意見等ありましたらお気軽にご連絡下さい。

Alternative content here