Android 如何使用Intent传递类引用(而不是对象)?

Android 如何使用Intent传递类引用(而不是对象)?,android,android-intent,service,android-activity,broadcastreceiver,Android,Android Intent,Service,Android Activity,Broadcastreceiver,我有一个场景,其中有多个活动和一个服务。 当需要从任何URL获取数据时,所有这些活动都会启动服务(活动的类名在意向中传递),并注册一个BroadcastReceiver来收听responseContent,该内容将在收到响应时由服务发送服务将把类名与响应一起返回原意。 我已经实现了这一点,它是有效的。但问题是,从BroadcastReceiver的onReceive()方法,我如何调用接收广播事件的活动的方法 注意:我想处理类引用,但不是对象。我试过这个 public void onReceiv

我有一个场景,其中有多个活动和一个服务。 当需要从任何URL获取数据时,所有这些活动都会启动服务(活动的
类名
在意向中传递),并注册一个
BroadcastReceiver
来收听
responseContent
,该内容将在收到响应时由服务发送<代码>服务将把
类名
与响应一起返回原意。

我已经实现了这一点,它是有效的。但问题是,从
BroadcastReceiver
onReceive()
方法,我如何调用接收广播事件的活动的方法

注意:我想处理类引用,但不是对象。我试过这个

public void onReceive(Context context, Intent intent) {
    Class<?> thisActivity = Class.forName(intent.getStringExtra("ClassName"));
    thisActivity.hello();  // hello() is a public and static method
}
public void onReceive(上下文、意图){
Class thisActivity=Class.forName(intent.getStringExtra(“类名”);
thisActivity.hello();//hello()是一个公共静态方法
}
但它不起作用。


谢谢。

您不能通过
意图传递对象引用。假设
Parcelable
对象就像
Serializable
对象一样,它们的引用丢失了


您应该在
活动
中将您的
BroadcastReceiver
声明为内部类,然后您将有一个对所附
活动
的引用。这就是方法。

您需要将完整的包名添加到“ClassName”字符串中,如下所示:

Class<?> thisActivity = Class.forName(intent.getStringExtra("com.android.youapp.ClassName"));
Class thisActivity=Class.forName(intent.getStringExtra(“com.android.youapp.ClassName”);

注意:如果该类位于不同的库项目中,则应相应地设置字符串名称。

您是如何从Intent的“类名”中提取类名的

准备意图:

Intent i = new Intent(....);
String className = MyClass.class.getCanonicalName();
i.putExtra(CLASS_NAME, className);
提取意图内容:

String canName = intent.getStringExtra(CLASS_NAME);
mClientClass = Class.forName(canName);
java.lang.reflect.Methodm m = mClientClass.getMethod("hello", new Class[] {});
获得结果:

Object result = m.invoke(mClientClass, new Object[] {});

我已经这样做了,但它引入了很多冗余,因为我必须在
onReceive()
方法中使用几乎相同的代码在所有活动中定义
BroadcastReceiver
。而不是制作一个
抽象
或“BaseActivity”,在其中封装所有常见行为,并让其他人扩展“BaseActivity”android/java不支持多重继承。那么谁将扩展
BroadcastReceiver
?正如我在回答中提到的。。。您将为
BroadcastReceiver
创建一个内部类。