android - 在 Intent 中传递 Activity 之间的接口(interface) - 接口(interface)无法序列化或可打包

标签 android android-intent android-activity

我想将接口(interface)从第一个 Activity 传递到第二个 Activity 。

我想从第二个 Activity 的界面启动方法,这将影响第一个 Activity 。

我很清楚不使用 onActivityResult 是非常过分的机制,它可能不是好的编程,但请和我一起滚动。

这是问题所在 - 我的接口(interface)无法实现 Serializable/Parcelable因为接口(interface)不能实现另一个类。

这是我的界面:

public interface ITest {
     void onSuccess(String text);
}

但是,我无法使用此界面开始我的 Activity ,因为它不是 Parcelable .

intent.putExtra("testInterface", new ITest() {
    @Override 
    void onSuccess(String text) {
    }
}

显然,我收到一个编译错误: 无法解析方法“putExtra(java.lang.String, ITest)”

最佳答案

你不能“传递接口(interface)”。 “接口(interface)”是一个抽象的东西。您想要传递的是该接口(interface)的具体实现,即:一个对象(恰好实现了您的接口(interface))。当你实例化你的“接口(interface)”时(在你的例子中,像这样:

intent.putExtra("testInterface", new ITest() {
    @Override 
    void onSuccess(String text) {
    }
}

您实际上是在创建实现接口(interface) ITest 的匿名类的实例。要在 Intent 中传递它,您需要使此类也实现 ParcelableSerializable

但是,即使您这样做了,也不能解决您的问题。您需要了解的是,您不能通过将对象(实例)作为“extras”放在 Intent 中来传递它们。当您这样做时,Android 实际上会序列化然后反序列化该对象,这样您最终会得到 2 个对象,一个是原始对象的序列化/反序列化副本。

如果您希望ActivityBActivityA 通信,您将需要使用另一种技术。尝试其中之一:

  • ActivityB 发送广播 IntentActivityA 监听
  • ActivityA 使用 startActivityForResult() 启动 ActivityB 并且 ActivityB 将数据发送回 ActivityA 使用 setResult()
  • 使用public static(即:全局)变量进行通信
  • 将数据存储在共享首选项、文件或数据库中

您真正需要了解的是,在某些情况下,可能会发生以下情况:

  • 您的应用正在运行,ActivityA 在堆栈中,ActivityB 在堆栈顶部
  • 用户按下主页
  • Android 将您的任务移至后台并最终终止托管进程
  • 用户返回到您的应用(通过重新启动它或从“最近的任务”列表中选择它)
  • Android 为您的应用程序创建一个新进程,并实例化 ActivityB,然后调用 onCreate()onStart() ActivityB 的 onResume()

在这种情况下,不再有 ActivityA 的实例。那个实例已经死了。所以 ActivityB 无法与 ActivityA 通信,因为它不再存在。

关于android - 在 Intent 中传递 Activity 之间的接口(interface) - 接口(interface)无法序列化或可打包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38893042/

相关文章:

Android AppWidget TextView : How to set background color at run time

android - Android 中的阿拉伯语文本问题

android - Android 中的 FFmpeg 命令以编程方式

java - Android 显示 AlertDialog,无论用户 Activity 如何

android - 通过多个 Activity 传递数据

android - 在 android config.xml 中出现错误 "unbound prefix"

android - 如何在android中将位图图像转换为二进制图像?

尝试从 BroadcastReceiver 中触发 Intent.ACTION_VIEW 时 Android Activity 崩溃

android - 使用 AlarmManager 将多个 pendingIntent 安排到同一 Activity

android - 如何显示半透明 Activity ?