Applicationを継承したクラス
Androidでは、バックキーをクリックしてアクティビティを落としてもプロセスは残ります。そして、再びアプリケーションを再び上げようとすると、新たなアクティビティを生成します。
よって、アプリケーション内で常に持たせておきたいモノがある場合に、Activityから派生したクラスのメンバに持たせると、切ない目を見ることになります。
アプリケーション内で常に持たせておきたいモノがある場合、android.app.Application を派生させます(て断定して良いんだろうか)。
Activity.getApplication(), Context.getApplicationContext() で取得可能ですので、引渡しは難しくありません。
package example.MyApplication; import android.app.Activity; import android.os.Bundle; import android.widget.Toast; public class MyActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MyApplication app = (MyApplication)this.getApplicationContext(); int cnt = app.count++; Toast.makeText(this, String.valueOf(cnt), Toast.LENGTH_LONG).show(); } }
package example.MyApplication; import android.app.Application; public class MyApplication extends Application { public int count; }
注意すべきは、AndroidManifest.xml の application 要素に、android:name でクラスを指定する必要があります。
<application ... android:name=".MyApplication"> ...
名前空間から指定するのも可能です。
<application ... android:name="example.MyApplication.MyApplication"> ...