我有一个继承自BroadcastReceiver的类,并且必须侦听PHONE_STATE事件。在onReceive方法的内部,我需要一个必须始终完全相同的对象实例(至少在状态响铃和下一次出现的ide / offhook之间)。这意味着我需要将对象存储在某个地方。它不能被序列化,也不能存储在数据库或SharedPreferences中。
我想到了两种不同的方法:
任何其他更好的想法?
答案 0 :(得分:1)
不知道它是否适用于您的情况,但我通常在SharedPreferences
中存储对象的字符串表示。您可以覆盖toString()
方法,该方法将创建字符串表示形式,并实现一个parse()
方法,该方法将解析保存的字符串并根据其保存的状态初始化对象。希望这会有所帮助。
答案 1 :(得分:0)
第三个3)使用自定义类的单例实例,然后你可以从调用到调用获得变量,但不是持久性(如果应用程序停止)。但是在运行时应用程序生命中从一个时间到另一个时间是有用的。为了尽可能避免通过android框架擦除数据,你可以将你的单例绑定到一个“前景”服务,看看http://developer.android.com/reference/android/app/Service.html#startForeground(int,%20android.app.Notification)通过这种方式获得更高的内存破坏保护。这就是我目前的方式在服务中使用单身人员......长时间执行(正常和重负荷活动约2周)没有任何麻烦......
这里是单身例子
class MyData {
private static MyData mMydata= null; // unique reference ( singleton objet container)
private MyObject myobject = null; // inside the unique object container we have the unique working object to be use by the application
// can't make instance from outside... we want to have single instance
// we want that outside use method "getInstance" to be able to use the object
private MyData() {
}
// retrieve and/or create new unique instance
public static MyData getInstance() {
if (mMydata == null) mMyData = new MyData();
return mMyData;
}
// Works with your memory stored object
// get...
public myObject getMyObject() {
return myobject;
}
// set ...
public void setMyObject(MyObject obj) {
myobject = obj;
}
}
在您处理“工作”对象的申请中,您可以像使用
// get object
MyObject obj = MyData.getInstance().getMyObject();
// or set a object
MyData.getInstance().setMyObject(obj);