Android:创建单例的另一个实例的线程

问题描述 投票:1回答:1

我的应用程序中有一个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);
        .
        .
    }

}
java android singleton android-10.0
1个回答
0
投票

为了避免内存泄漏,您必须从context类中删除Single字段。该代码在我的项目中可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.