Android でのメモリ リークについては既に質問しましたが、メモリ リークについてはまだよくわかりません。ここで、 によって受信されたデータを保持する必要がありますPhoneStateListener
。インスタンスが 1 つだけ存在することを保証する必要があるため、Singleton パターンが役立ちます。
public class PhoneStateInfo {
/** -1 until the first reception */
private int mCid = -1;
/** -1 until the first reception */
private int mLac = -1;
/** 0 until the first reception */
private int mMcc;
/** 0 until the first reception */
private int mMnc;
// And so on...
private static PhoneStateInfo INSTANCE = new PhoneStateInfo();
public static PhoneStateInfo getInstance() {
return INSTANCE;
}
private PhoneStateInfo() {}
/**
* Reverts the single instance to its initial state
* But if I have 10 or 20 fields which have various default values, it will be easy to forget something
*/
void clear() {
mCid = -1;
mLac = -1;
mMcc = 0;
mMnc = 0;
mRssi = -1;
mSimState = TelephonyManager.SIM_STATE_UNKNOWN;
mDeviceId = null;
mSubscriberId = null;
mPhoneNumber = null;
}
/**
* Reverts the single instance to its initial state
* Short and clear
*/
static void clearInstance() {
INSTANCE = null; // If I delete this line, memory leaks will occur
// because the old reference is left alive will not be garbage-collected
INSTANCE = new PhoneStateInfo();
}
}
clear()
およびclearInstance()
メソッドを参照してください。私のコメントは正しいですか?