【问题标题】:Android custom Intent classAndroid 自定义 Intent 类
【发布时间】:2017-01-24 17:09:26
【问题描述】:

我想将一个复杂对象从一个 Activity 发送到另一个,所以这个复杂对象不能被序列化,因为这个对象中的某些字段是系统类并且本机不可序列化。这就是为什么我要创建一个名为“MyIntent”的自定义类,它继承自 android.content.Intent,通过这种方式,我可以将任何类型的对象放入我的自定义 Intent 中。但是,在第二个活动中,getIntent() 方法返回 android.content.Intent 实例,而不是 MyIntent 实例。我不明白为什么,也许我没有正确实现 android.content.Intent 类。

public class MyIntent extends Intent
{
}

//starting activity
MyIntent intent = new MyIntent();
intent.setClass(context, SecondActivity.class);
context.startActivity(intent);


//inside of onCreate() of SecondActivity
Intent i = getIntent();
i instanceof MyIntent = false

【问题讨论】:

  • MyIntent i = (MyIntent) getIntent()
  • Anton,我不需要发送系统类,但是我要发送的类与某些系统类高度耦合。

标签: java android android-intent serializable


【解决方案1】:

startActivity() 涉及进程间通信,即使您正在启动的活动在同一个应用程序和同一个进程中。 Android 将忽略您的子类,因为处理startActivity() 请求的操作系统进程不能使用您的子类,因为它在您的应用程序中,并且操作系统进程不是您的应用程序。而且,将启动活动的请求传递回您的进程的 IPC 将不知道您的子类的任何信息。

要么:

  • 将这些组合成一个活动(例如,使用两个片段),或

  • 使用两种活动都可以使用的某种单例数据管理器

【讨论】:

  • 谢谢,我明白了,第二种方法(使用单例)对我有用。
  • @TamerlanRustambayli:只要确保你跟踪你在那里使用了多少内存,因为单例是故意的内存泄漏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2015-10-05
  • 1970-01-01
  • 2011-10-25
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多