Applicationクラスを継承したクラスを作成し、データのApplication内共有を行います。
Applicationクラスは、Androidアプリケーションがプロセスとして起動する際に作成され、呼び出されます。
継承することで、独自実装を持つことが出来ます。
Override出来るMethodも用意されており、ライフサイクルも以下の様に存在します。
onCreate Applicationクラス作成時
onTerminate Applicationクラス終了時
onLowMemory 使用出来るメモリが少なくなった時
onConfigurationChanged 端末の状態が変わった時(オリエンテーションの変更など)
Application内での共有データ等の管理などに便利です。
Applicationクラスを継承する際に必要な事は、
• 継承したクラスの作成
• AndroidManifest.xmlへの独自Applicationクラスの登録
以上の二点です。
また、使用する場合には以下に気をつけます。
• Context#getApplication() を使用し、独自Applicationクラスのオブジェクトを取得する。
今回は2枚のActivityを作成し、以下の様に動作するサンプルを作成します。
1. 画像リソースの取得/独自Applicationクラスへのデータセット
2. 独自Applicationクラスからのデータロード/画像リソースの表示
Applicationクラスの継承
まず、Applicationクラスを継承した、独自Applicationクラスを作成します。
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属性に
android:name="ClassPath"を追記します。
今回は、以下のように記述しています。
<!-- application属性に「android:name」属性を追加 -->
<application android:name="com.techbooster.applicationclasstest.TestApplication"
android:icon="@drawable/icon" android:label="@string/app_name">
Activityからの利用方法
上記の通り、Activityから独自Applicationのオブジェクトを取得する為には、
Context.getApplicationContext()
を利用する必要があります。
以下に1つ目のActivityのソースコードを記述します。
JpegリソースからBitmapオブジェクトを作成し、独自Applicationオブジェクトにセットしています。
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を用いて表示しています。
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);
}
}
0 件のコメント:
コメントを投稿