我的应用程序中有一个singleton
对象。
public class Single {
private Context mContext;
private static Single sInstance;
public synchronized static Single getInstance(Context context) {
if(sInstance == null) {
sInstance = new Single(context);
}
return sInstance;
}
private Single(Context context) {
mContext = context;
}
}
[运行应用程序时,我通过在主线程上调用getInstance
方法来创建此类的实例。但是,当我在同一进程中从单独的线程调用getInstance
方法时,它将创建Single
类的另一个实例。
我的代码每个进程不应该只有一个Single
类的对象吗?如何更改为每个进程只有一个实例。
我正在做的是:
private class ProfileBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
Log.v(TAG, "onReceive :: " + action);
Handler handler = mHandlerMap.get(action);
if (handler != null) {
handler.onReceive(context, intent, device);
}
}
}
interface Handler {
void onReceive(Context context, Intent intent, BluetoothDevice device);
}
private void registerIntentReceiver(BroadcastReceiver receiver, IntentFilter filter) {
mContext.registerReceiver(receiver, filter, null, mReceiverHandler);
}
我正在用ProfileBroadcastReceiver
方法注册registerIntentReceiver
。我还传递了android.os.Handler
对象,以便onReceive
方法在单独的线程上运行。这是我调用getInstance()
方法的地方:
private class StateChangedHandler implements EventManager.Handler {
public void onReceive(Context context, Intent intent, BluetoothDevice device) {
..
Single single = Single.getInstance(context);
.
.
}
}
为了避免内存泄漏,您必须从context
类中删除Single
字段。该代码在我的项目中可以正常工作。