1

将值从第三类的静态字段转移Activity A到另一个有什么缺点,而不是?Activity BExtraBundle

在我的应用程序中,有时我需要在两个Activitys 之间传输 15 - 20 个值。在我看来,使用某种TransferHandler.

目前,我想到了一个缺点:当Extras启动ActivityB 之前没有输入一个值时,我会得到一个Exception. 用静态字段解决,有可能是我忘记赋值了,如果这个值之前是从别的地方赋值的,可能是ActivityB中使用了错误的值。不过,我认为这是一个“程序员问题” ” 而不是“程序问题”。那么还有其他缺点还是我可以自由选择一种方式?两种变体的性能如何?

4

4 回答 4

4

首先,如果您打算使用静态值,您应该使用您的Application类来执行此操作(因为 Android 系统向您保证它是一个真正的单例)

因此,您可以将数据存储在自定义应用程序类的属性中,并使用特定方法来存储和获取这些值。这将确保您不会“忘记”任何值。

另外,在 15-20 之间,我强烈建议您制作一个专门的 POJO 类来存储所有这些......

于 2012-11-18T14:29:54.157 回答
2

我认为在android中使用静态类传递信息的最大缺点是系统可以随时清除静态字段和对象。这意味着任何静态非最终值都可以​​始终为空。

所以它可能在大多数情况下都可以正常工作,但是如果您不确定处理这些空情况并且您的用户开始使用您的应用程序,他们将偶尔遇到空指针异常崩溃,因为系统认为它需要存储在那些静态字段中的内存。

在我看来,在活动之间传递数据的最佳方式是使用 Intents,请参阅此处以获取一个很好的示例。或者使用数据库或sharedpreferences

谷歌也有很好的阅读关于活动/服务之间的传递数据here

于 2012-11-18T14:48:26.240 回答
0

您不能使用第三类将值从一个活动转移到另一个活动。这是它的问题。您在活动中创建一个对象-a,然后将一些值存储到其中。然后在使用这些值之后,您需要在活动 b 中再创建一个对象,然后在活动 b 中创建的对象将不会具有您在活动 a 中分配的值。

于 2012-11-18T14:20:56.747 回答
-1

您可以使用 SharedPreferences 类来存储变量的值:

SharedPreferences settings = getSharedPreferences("shared_pref", MODE_WORLD_READABLE);
    SharedPreferences.Editor editor = settings.edit();
    // With editor you put data
    editor.putString(firstName, "John");
    editor.putString(lastName, "Smith");
    editor.commit();

您可以在所有活动中访问此数据:

// With settings you access to data in different activities 
SharedPreferences settings = getSharedPreferences("shared_pref", MODE_WORLD_READABLE);

String firstName = settings.getString(firstName, null);
String lastName = settings.getString(lastName, null);
于 2012-11-18T14:39:25.683 回答