安卓应用的全局对象

6

我正在开发一个Android应用程序。其中有一些活动(activities)。我需要在所有活动中都能够使用的对象。 有什么想法如何组织它?


什么是“全局对象”?如果您指的是整个应用程序都可用的类,则请查看此线程http://androidforums.com/developer-101/124278-global-objects.html。 - evilone
在我的情况下,它必须是某个类的对象。在所有活动中,我必须使用这个对象的方法,向对象的字段添加数据等等。 - mmmaaak
4个回答

12

可以按照以下方式使用全局的 Application 对象:

package com.yourpackagename;

public class App extends Application {
}

AndroidManifest.xml文件中:

<application android:name=".App">

要从Activity中访问它:

App globalApp = (App) getApplicationContext();

App类将在应用程序启动时自动实例化。只要应用程序进程仍然存在,它就会一直可用。它可以作为一个全局存储空间,您可以将自己的东西放入其中,并在整个应用程序生命周期内访问它们。


我感觉这里有些错别字,但是不知道要纠正哪些!:) - Ian MacDonald
1
更正了错别字。如果我漏掉了任何东西,请随意评论。 - Ashwin N Bhanushali
你的初始类定义是 GolbalObject,但你的使用是 GlobalObject - Ian MacDonald
1
感谢您。我已经纠正了我的拼写错误。 - Ashwin N Bhanushali
@Chris 在上面的回答中,我已经说明了:1)它可以作为全局存储,而不是针对数据。2)我已经说明“它可以”,这并不意味着你应该这样做,这只是一个建议,而不是命令。3)有些库需要使用应用程序对象,例如:Dagger2,Craslytics等。 - Ashwin N Bhanushali
显示剩余3条评论

3
有几种方法可以实现这个功能。如果您想分享的对象是一个字符串(或者可以用字符串轻易描述出来),我建议使用Shared Preferences。它可以作为一个键值存储器,在应用程序中共享数据。
如果不是这种情况(即不能使用字符串描述),您可以考虑将其作为Intent的附加项传递,从而启动各种活动。例如:
Intent newActivity = new Intent(CurrentActivity.class, ActivityToLaunch.class);
newActivity.putExtra("object_key", Bundle_With_Your_Object);

如果您对此策略的详细信息感兴趣(特别是如果您不熟悉Bundle类),建议阅读此Android文档


1
你可以在这种情况下使用SharedPreferences:
要添加或编辑:
SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE);
prefs.edit().putString("your_key", value).commit();

清除:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE);
prefs.edit().clear();

获取值:

SharedPreferences prefs = this.getSharedPreferences("Cusom Name", Activity.MODE_PRIVATE);               
String value = prefs.getString("your_key", "");

这假设发帖者想要分享的对象是一个字符串,这可能是一个好的假设,尽管也许“最好”的解决方案是拥有一个toString和构造函数,使得Object x = new Object(y.toString());将给出一个等同于y的x? - mfsiega
我认为他需要一些对象属性而不是一个真实对象。通过意图传递对象是另一种好的方法,但发送和处理它的代码比较复杂。 - PhatHV

0
首先,创建一个名为MasterActivity的类,它继承自Activity并定义你的全局对象。
public class MasterActivity extends Activity
{
     public Object mObject;
}

然后,您需要将主活动类扩展为MasterActivity,如下所示:

// your main activity
public class MainActivity extends MasterActivity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // you can now use mObject in your main class
        mObject.yourmethod();
    }
}

通过这种方式,您将能够通过扩展MasterActivity而不是Activity,在所有活动中使用您的对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接