Android 为什么要使用Intent将字符串从一个活动发送到另一个活动?
我有一个简单的疑问。在安卓系统中,几乎到处都有这样的说法:传递Android 为什么要使用Intent将字符串从一个活动发送到另一个活动?,android,android-intent,android-activity,Android,Android Intent,Android Activity,我有一个简单的疑问。在安卓系统中,几乎到处都有这样的说法:传递字符串或int或任何你应该使用Intent并使用putextra()的东西,或者任何我可以创建静态对象并从任何活动访问它的东西 在使用intent这样做的背后一定有一些原因,有人能告诉我为什么我们需要intent将一个对象从一个活动传递到另一个活动中,在那里我们可以像在java中一样正常地进行操作 从中读取意图定义 意图是对要执行的操作的抽象描述。在Android中,意图用于激活组件(活动、服务、广播接收器)。您可以通过静态变量传递字
字符串
或int
或任何你应该使用Intent
并使用putextra()
的东西,或者任何我可以创建静态对象并从任何活动
访问它的东西
在使用intent这样做的背后一定有一些原因,有人能告诉我为什么我们需要
intent
将一个对象从一个活动
传递到另一个活动
中,在那里我们可以像在java中一样正常地进行操作 从中读取意图定义
意图是对要执行的操作的抽象描述。在Android中,意图用于激活组件(活动、服务、广播接收器)。您可以通过静态变量传递字符串或其他数据,但这不是一种好的做法,因为在大型应用程序中,如果您使用的是静态变量,管理起来会很麻烦
另外,读取意图有两种类型,隐式意图和显式意图,在exlicit意图中,您可以使用静态变量,因为您知道目标组件,但是通过隐式意图,在没有指定目标组件的情况下,静态变量没有任何用处。我认为使用.putExtras()的主要原因是其目的是在两个活动之间传递一个大型对象,如字符串数组
尽管如此,我还是建议创建一个全局类,其中包含要在多个活动中使用的所有变量。访问多个位于同一位置的变量要比在活动之间传递一组变量简单得多。因为我们不认为活动是静态上下文。活动有生命周期,所以我们尝试将数据纳入这个生命周期,而不是绕过它 仅仅使用静态变量没有什么直接的错误,但是可能会出现一些问题。例如,您显示一个
活动的多个实例。子活动
所需的字符串
可能与您以前所需的不同,因此当向后导航到该活动
的上一个实例时,该值不是您所期望的值
通过Intent
传入字符串也会使活动独立。一个活动
的设计不应使其与另一个活动紧密耦合。通过Intent
传递数据意味着任何活动
都可以启动此活动
,只要它传递了正确的数据
也就是说,在某些情况下,使用静态可访问变量是合理的,例如,对于不会更改且由应用程序的多个部分访问的常量值,或者对于多个活动可能需要的任何数据。简单地说,静态变量应该在加载时预加载。。。因此,它将增加内存使用和处理,如果应用程序没有执行到静态变量is use。。预先加载变量是毫无意义的。一般来说,您可以使用静态将数据从一个活动传递到另一个。这并不意味着这是最好的主意。以下是使用Intent
附加功能的几个原因
这是一个惯例。这是大多数安卓开发者的工作,这很重要。如果除您以外的任何人要阅读或维护您的代码,最好使用通用的编程问题解决方案
通常,在Java或其他OO编程语言中,最好避免使用静态变量(除非它们是常量)。和
考虑一个普通的非Android应用程序。忘记活动
和意图
。如果您有一个控制器对象需要创建另一个控制器对象,它可以使用如下代码:
FirstController.java:
public void doSomething(){
SecondController newController=新的SecondController();
newController.start();
}
如果您想将字符串变量从第一个控制器传递到第二个控制器,那么您不会使用静态变量。。。你只要这样做:
newController.start(“使用somedata”);
现在,再想想Android<代码>活动
对象的实例化方式不同。一个活动
不仅仅是新建
另一个,持有对它的引用,并调用它的方法。这就是为什么需要这个相当复杂的过程。因为如果Activity
对象是通过Intent
对象间接创建的,那么“调用者”还没有对“被调用”对象的引用,因此不能使用常规方法和参数传递。所以,如果我们接受这个限制,那么您需要另一种方式来传递信息。由于意图
对象用于创建活动
,或返回到现有的活动
,因此赋予意图
处理额外数据(如传递的参数)的能力是有意义的
同样,创建这个解决方案是因为人们普遍不喜欢使用静态变量,以及它们存在的问题
但是,如果您只有两个活动
类,并且每个活动
只有一个并发实例,那么您可能不需要使用静态变量。出于我概述的原因,我仍然不推荐它。阅读这些文章,看看这张pdf,你就会知道为什么不使用静态