如何在Android应用程序中的进程之间共享实例变量的内存?

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

我有一个单例课程,看起来像这样,

public class MyHomeFactory {

    public static final String TAG = "sddsd";
    private static MyHomeFactory myHomeFactory = null;

    private MyHomeFactory() {
        Log.i(TAG, "Inside my home factory");
    }

    public static MyHomeFactory getInstance() {
        if(myHomeFactory == null) {
            myHomeFactory = new MyHomeFactory();
        }
        return myHomeFactory;
    }
}

我在应用程序类和服务类(在不同过程中运行)中调用MyHomeFactory.getInstance(),类似这样,

public class CornetApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Log.i(TAG, "The value of instance is : " + MyHomeFactory.getInstance());
    }
}

并且从服务内部看起来像onBind

@Override
    public IBinder onBind(Intent intent) {
        return new IMyAidlInterface.Stub() {
            @Override
            public void printTime(long time) throws RemoteException {
                Log.i(TAG, "Instance value is : " + MyHomeFactory.getInstance());
            }
        };
    }

AndroidManifest中的服务声明看起来像这样,

<service
            android:name=".OnDisConnectedService"
            android:enabled="true"
            android:exported="true"
            android:process=":separate_process"/>

令我惊讶的是,实例值都印有这样的内容,

com.example.circa.MyHomeFactory@63b959e

代替getInstance()。如何在流程之间共享该实例?我在这里感到困惑。

java android process instance ipc
1个回答
-1
投票

您的getInstance()方法返回一个对象。就共享而言,您将使用getInstance()提供对单例对象的访问。

但是,您试图将对象连接到文字字符串。正在发生的是正在为您的对象调用toString(),该对象返回objectName@HashCodeNumber。如果要从单例对象中提供特定的String,则应实现一个toString()方法来覆盖Object中的那个,或者为单例对象中的数据字段实现“ get”方法。

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