使用你的答案作为一个提示,我搜索了一遍,发现在互联网上的一些好东西,它在这里(约辛格尔顿-活动的服务生命周期):
http://www.2linessoftware.com/2010/08/03/singletons-and-services-and-shutdowns-oh-my/
和良好相关答案在这里:
Singletons vs. Application Context in 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();
}
}
次活动:
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;
}
}
Hi Antal Horvath, – hungson175