我有一个单例课程,看起来像这样,
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()
。如何在流程之间共享该实例?我在这里感到困惑。
您的getInstance()
方法返回一个对象。就共享而言,您将使用getInstance()
提供对单例对象的访问。
但是,您试图将对象连接到文字字符串。正在发生的是正在为您的对象调用toString()
,该对象返回objectName@HashCodeNumber
。如果要从单例对象中提供特定的String,则应实现一个toString()
方法来覆盖Object
中的那个,或者为单例对象中的数据字段实现“ get”方法。