あなたの答えをヒントとして、もう一度検索して、インターネット上でいくつかの良いものを見つけました。ここにあります(Singleton-Activity-Serviceライフサイクルについて):
http://www.2linessoftware.com/2010/08/03/singletons-and-services-and-shutdowns-oh-my/
ここに関連する良い回答があります:
シングルトン vs. Android のアプリケーション コンテキスト?
私はシングルトンで遊んでいて、答えが完全に正しくないことがわかりました。アクティビティ A でシングルトン S を作成してから、アクティビティ B に移動しようとしました (A を離れる前に、 A.finish() を呼び出し、 B.onCreate() で System.gc() を呼び出します)-しかし、 S.finalize( ) は呼び出されません。
コードは次のとおりです。
public class FirstAct extends Activity implements OnClickListener {
public static final String TAG = "Test_Service";
private View btChange;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.gc();
setContentView(R.layout.first_lay);
btChange = findViewById(R.id.btChange);
btChange.setOnClickListener(this);
SomeSingleton.getInstance();
}
@Override
public void onClick(View v) {
Intent i = new Intent(this,SecAct.class);
startActivity(i);
this.finish();
}
@Override
protected void onDestroy() {
Log.i(TAG,"First activity is destroyed !");
super.onDestroy();
System.gc();
}
}
2 番目のアクティビティ:
public class SecAct extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.gc();
setContentView(R.layout.first_lay);
((TextView) findViewById(R.id.tvLabel)).setText("Second activity");
findViewById(R.id.btChange).setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent i = new Intent(this,FirstAct.class);
this.startActivity(i);
this.finish();
}
@Override
protected void onDestroy() {
Log.i(FirstAct.TAG,"Second activity is destroyed !");
super.onDestroy();
System.gc();
}
}
シングルトン:
public class SomeSingleton {
private static volatile SomeSingleton instance = null;
private static int count = 0;
private SomeSingleton() {
count++;
Log.i(FirstAct.TAG, "Created, instance: #" + count);
}
public static SomeSingleton getInstance() {
if ( instance == null ) {
instance = new SomeSingleton();
}
return instance;
}
@Override
protected void finalize() throws Throwable {
Log.i(FirstAct.TAG, "Finalized! ");
super.finalize();
}
public void kill() {
instance = null;
}
}