使用静态字段在两个活动之间传输值

时间:2012-11-18 14:03:42

标签: android static

使用第三类的静态字段而不是Activity A将值从Activity B传输到ExtraBundle是否有任何不利之处?

在我的应用程序中,有时候我需要在两个Activity之间传输15到20个值。在我的观点中,使用TransferHandler中的静态字段更清晰地解决这个问题。

目前,我有一个缺点:如果在启动Extras B之前没有将值放入Activity,我将获得Exception。使用静态字段解决它,我可能忘记分配一个值,如果该值之前从其他地方分配,可能是Activity B中使用了错误的值。尽管如此,我认为这是一个"程序员问题"而不是"程序问题"。那么有没有进一步的减少或我可以自由选择一种方式?这两种变体的性能如何?

4 个答案:

答案 0 :(得分:4)

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

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

另外,15-20,我强烈建议你制作一个专门的POJO课程来存储所有这些......

答案 1 :(得分:2)

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

所以它大部分时间都可能正常工作,但如果你不确定处理这些空状态并且你的用户开始使用你的应用程序,他们会偶尔得到空指针异常崩溃,因为系统决定它需要存储在那些静态字段中的内存。

通过使用Intents see here for a good example,我认为在活动之间传递数据的最佳方式。或者使用数据库或sharedpreferences

谷歌也很好地阅读了活动/服务here之间的传递数据。

答案 2 :(得分:0)

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

答案 3 :(得分:-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);