更新 2:示例构造函数:
CounterAndNotifier counter = new CounterAndNotifier(0, new SerializableRunnable() {
@Override
public void run() {
}
});
或者
SerializableRunnable runnable = new SerializableRunnable() {
@Override
public void run() {
/* Running code here */
}
});
CounterAndNotifier counter = new CounterAndNotifier(0, runnable);
更新: Runnable 是一个接口,本身不能序列化。为了解决这个问题,创建一个像这样的新类:
public abstract class SerializableRunnable implements Runnable, Serializable {
/* Nothing needs to go here */
}
然后将 Runnable 的引用更改为 SerializableRunnable,您应该能够毫无问题地将对象序列化为意图。
您的新对象将如下所示:
public class CounterAndNotifier implements Serializable
{
private int counter = 0;
private int count;
private SerializableRunnable runnable;
public CounterAndNotifier(int count, SerializableRunnable runnable)
{
this.count = count;
this.runnable = runnable;
}
public synchronized void incrementCounter()
{
counter++;
if (counter == count) {
runnable.run();
}
}
}
您仍然可以使用相同的方式创建 Runnable 对象,只是使用不同的名称。
原始答案:您不能将常规对象放入Intent
额外对象中。如果您的对象成员都是可序列化的类型,那么您可以只实现Serializable
接口,然后您可以将对象放入Intent
. 否则,您可以实现Parceable
对象并将其展平为 Parcel。
Serializable
只要您的对象成员是基本类型,使用就需要更少的代码更改。此外,您应该首先检查接收应用程序是否支持以确定您应该使用哪个。
它看起来像这样:
public class YourObject implements Serializable {
private static final long serialVersionUID = -6242440735315628245L;
/* Your class members */
}
添加到意图:
Intent intent = new Intent();
intent.putExtra("YourKey", new YourObject());
脱离本意:
YourObject obj = (YourObject)intent.getSerializableExtra("YourKey");