Applicationクラスを継承して、データの共有をする。
|本日は、Applicationクラスを継承したクラスを作成し、データのApplication内共有を行います。
Applicationクラスは、Androidアプリケーションがプロセスとして起動する際に作成され、呼び出されます。
継承することで、独自実装を持つことが出来ます。
Override出来るMethodも用意されており、ライフサイクルも以下の様に存在します。
onCreate | Applicationクラス作成時 |
onTerminate | Applicationクラス終了時 |
onLowMemory | 使用出来るメモリが少なくなった時 |
onConfigurationChanged | 端末の状態が変わった時(オリエンテーションの変更など) |
Application内での共有データ等の管理などに便利です。
詳細な使用方法は続きをどうぞ
Applicationクラスを継承する際に必要な事は、
- 継承したクラスの作成
- AndroidManifest.xmlへの独自Applicationクラスの登録
以上の二点です。
また、使用する場合には以下に気をつけます。
- Context#getApplication() を使用し、独自Applicationクラスのオブジェクトを取得する。
今回は2枚のActivityを作成し、以下の様に動作するサンプルを作成します。
- 画像リソースの取得/独自Applicationクラスへのデータセット
- 独自Applicationクラスからのデータロード/画像リソースの表示
Applicationクラスの継承
まず、Applicationクラスを継承した、独自Applicationクラスを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package com.techbooster.applicationclasstest; import android.app.Application; import android.graphics.Bitmap; import android.util.Log; public class TestApplication extends Application { private final String TAG = "DEBUG-APPLICATION" ; private Bitmap obj; @Override public void onCreate() { /** Called when the Application-class is first created. */ Log.v(TAG, "--- onCreate() in ---" ); } @Override public void onTerminate() { /** This Method Called when this Application finished. */ Log.v(TAG, "--- onTerminate() in ---" ); } public void setObj(Bitmap bmp){ obj = bmp; } public Bitmap getObj(){ return obj; } } |
AndroidManifest.xmlへの追記
Manifest.xmlのApplication属性に
1 | android:name= "ClassPath" |
を追記します。
今回は、以下のように記述しています。
1 2 3 | <!-- application属性に「android:name」属性を追加 --> <application android:name= "com.techbooster.applicationclasstest.TestApplication" android:icon= "@drawable/icon" android:label= "@string/app_name" > |
Activityからの利用方法
上記の通り、Activityから独自Applicationのオブジェクトを取得する為には、
1 | Context.getApplicationContext() |
を利用する必要があります。
以下に1つ目のActivityのソースコードを記述します。
JpegリソースからBitmapオブジェクトを作成し、独自Applicationオブジェクトにセットしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | package com.techbooster.applicationclasstest; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity implements OnClickListener { private Bitmap bmp_main; private TestApplication ta; private Button bt; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.main); /* getApplication()で自己アプリケーションクラスのインスタンスを拾う */ ta = (TestApplication) this .getApplication(); bt = (Button) findViewById(R.id.Button01); bt.setOnClickListener( this ); } @Override public void onClick(View v) { if (v == bt) { bmp_main = BitmapFactory.decodeResource(getResources(), R.drawable.andy); ta.setObj(bmp_main); Intent i = new Intent(); i.setClassName( "com.kobashin.applicationclasstest" , "com.kobashin.applicationclasstest.Sub" ); startActivity(i); } } } |
2つ目のActivityのソースコードは以下の通りです。
独自Applicationオブジェクトから、セットしたBitmapオブジェクトを取得し、
ImageViewを用いて表示しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package com.techbooster.applicationclasstest; import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; import android.widget.ImageView; import android.widget.LinearLayout; public class Sub extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.sub); TextView tView = new TextView( this ); /* getApplication()で自己アプリケーションクラスのインスタンスを拾う */ TestApplication ta = (TestApplication) this .getApplication(); Bitmap bmp_sub = ta.getObj(); LinearLayout lLayout = (LinearLayout)findViewById(R.id.LinearLayout01); ImageView iView = (ImageView)findViewById(R.id.ImageView01); iView.setImageBitmap(bmp_sub); } } |
One Comment