在Android中,什么是更快的通信、发送广播和直接调用活动方法?

在Android中,什么是更快的通信、发送广播和直接调用活动方法?,android,android-fragments,android-activity,android-broadcast,Android,Android Fragments,Android Activity,Android Broadcast,在我的应用程序中,我必须从片段调用活动方法 我知道我可以通过两种方式做到这一点: 1。通过向活动发送广播: Intent Intent=新意图(“过滤器”); 意向。额外(“额外”,1); 发送广播(意图) 2。或者直接调用活动方法: ((MyActivity)getActivity()).method() 我想知道哪种沟通方式更快更安全。任何帮助都将不胜感激 谢谢。对于片段和包含片段的活动之间的通信,实际上有一个更好的第三选项 更好的选择是使用接口作为回调方法。本文档对此进行了详细描述: 与两

在我的应用程序中,我必须从片段调用活动方法

我知道我可以通过两种方式做到这一点:

1。通过向活动发送广播:

Intent Intent=新意图(“过滤器”);
意向。额外(“额外”,1);
发送广播(意图)

2。或者直接调用活动方法:

((MyActivity)getActivity()).method()

我想知道哪种沟通方式更快更安全。任何帮助都将不胜感激


谢谢。

对于片段和包含片段的活动之间的通信,实际上有一个更好的第三选项

更好的选择是使用接口作为回调方法。本文档对此进行了详细描述:

与两种方法相比,使用接口更受欢迎,因为它更安全、更高效

对于第一种使用广播接收器的方法,这实际上是一种非常低效的解决方案,因为广播接收器不适用于您所追求的任务

让我引用Android文档中的一些内容:

警告:限制您在应用程序中设置的广播接收器数量。广播接收器过多可能会影响应用程序的性能和用户设备的电池寿命。有关可以用来代替BroadcastReceiver类安排后台工作的API的更多信息,请参阅后台优化。

因此,是的,与您建议的其他方法和我建议的方法相比,广播接收器将对应用程序的性能和设备的电池寿命产生更大的影响

此外,不要忘记广播接收器是用来收听广播的。您在示例中使用的广播接收器类型实际上是一个全局广播,您没有明确限制它的“范围”,因此任何广播接收器都可能“收听”您的广播。在安全方面,使用这样的全球广播也不安全

您也不希望其他应用程序可能触发与您应用程序的广播接收器巧合的广播,导致它接收不适合它的数据,并由于这种意外和巧合的命名而崩溃

老实说,以一种不适合的方式使用广播接收器还有更多的潜在问题

至于直接调用活动方法的第二种方法。。。对于管理代码来说,这实际上是非常低效的。你基本上是把片段和特定的活动紧密地联系在一起

然而,根据设计,片段通常会被交换到其他活动或片段中。。。每次要从其父级运行代码时,基本上都必须执行多个
if语句
cast

另外,请记住,如果以后更改MyActivity中的代码,可能会导致此片段出现问题,因为您忘记了它与活动的绑定有多紧密


但如果您使用更喜欢的回调接口方法,它只是一个中间人,旨在传递“嘿,为我做点什么”的消息。快速直接。它还可以友好地处理您稍后要附加此片段的任何活动或片段,因为这些活动或片段必须实现接口,并且父级和子级之间的回调桥已经形成

对于片段和包含片段的活动之间的通信,实际上有一个更好的第三选项

更好的选择是使用接口作为回调方法。本文档对此进行了详细描述:

与两种方法相比,使用接口更受欢迎,因为它更安全、更高效

对于第一种使用广播接收器的方法,这实际上是一种非常低效的解决方案,因为广播接收器不适用于您所追求的任务

让我引用Android文档中的一些内容:

警告:限制您在应用程序中设置的广播接收器数量。广播接收器过多可能会影响应用程序的性能和用户设备的电池寿命。有关可以用来代替BroadcastReceiver类安排后台工作的API的更多信息,请参阅后台优化。

因此,是的,与您建议的其他方法和我建议的方法相比,广播接收器将对应用程序的性能和设备的电池寿命产生更大的影响

此外,不要忘记广播接收器是用来收听广播的。您在示例中使用的广播接收器类型实际上是一个全局广播,您没有明确限制它的“范围”,因此任何广播接收器都可能“收听”您的广播。在安全方面,使用这样的全球广播也不安全

您也不希望其他应用程序可能触发与您应用程序的广播接收器巧合的广播,导致它接收不适合它的数据,并由于这种意外和巧合的命名而崩溃

老实说,以一种不适合的方式使用广播接收器还有更多的潜在问题

至于直接调用活动方法的第二种方法。。。对于管理代码来说,这实际上是非常低效的。你基本上是把片段和特定的活动紧密地联系在一起

然而,根据设计,片段通常会被交换到其他活动或片段中。。。每次要从其父级运行代码时,基本上都必须执行多个
if语句
cast

另外,请记住,如果您以后更改MyActivity中的代码,可能会因为您忘记它与
public interface Somelistener {

     public void someMethod();

}
YourFragment extends Fragment {

   Somelistener listener;

    public void onActivityCreated(Context context){

      listener = (SomeLisner)context;

    }

    public void buttonClick()
    {
       listener.someMethod();
    }

}
MainActivity implements SomeListener{

   @Override
   public void someMethod()
   {
      // Activity method
   }
}
SomeOtherActivity implements SomeListener{

   @Override
   public void someMethod()
   {
      // somethother method
   }
}