Android 中活动之间的对象共享

Object Sharing Between Activities in Android

您好,我有一个关于在整个应用程序中传递对象的问题。 假设我想在整个应用程序中拥有一个大的自定义对象。 该对象将被多个活动和服务使用。 我一开始做的是这样的。

首先,我创建了一个应用程序class并定义了一个单例对象。

public class FooApplication extends Application {
    public static SharedObj obj;
    ...
}

其次,在一个activity中我设置了这个对象的值

public class FooActivity extends Activity {
    OnCreate() {
        FooApplication.obj = SharedObj.getInstance();
    }
}

第三,在另一个activity我访问这个对象

public class BarActivity extends Activity {
    OnCreate() {
        SharedObj useThis = FooApplication.obj;
    }
}

我的问题是,这有什么问题? 它似乎工作正常,但我发现有时这个单例对象的值由于某种原因被设置为 null。 我像这样共享这个对象而不是使其可打包的主要原因是这样做对我来说有点昂贵,而且我所做的看起来很容易做到。有缺点吗?

经过一番研究,我发现还有另一种在整个应用程序中共享对象的方法。

首先在app中定义class

public class FooApplication extends Application {
    public SharedObj obj = new SharedObj();
    ...
}

其次,像这样activity初始化

public class FooActivity extends Activity {
    OnCreate() {
        FooApplication fooApp = (FooApplication)getApplicationContext();
        fooApp.obj = new SharedObj();
    }
}

第三,在另一个activity我访问这个对象

public class BarActivity extends Activity {
    OnCreate() {
        SharedObj useThis = ((FooApplication)getApplicationContext()).obj;
    }
}

此方法(使用 getapplicationContext())与我在第一部分中使用的单例对象有何不同?这个比较推荐吗?

提前致谢!

这种方法的主要缺点是 Android 系统 may kill your process at any point in time。通常这是在需要内存用于其他目的时完成的(例如传入的 phone 调用)。 Android 然后将重新启动您的进程,并重新创建每个 activity(当 activity 变得可见时)。这样做时,它将调用每个 activity 的 onCreate 方法,将 activity 保存的打包数据包传递给它。

应用程序 class 也将重新创建。但是,您保存在那里的对象将不会被重新创建。

因此,虽然很痛苦,但分割确保您的对象可以恢复到 activity(和进程)被杀死时的状态。

另一种方法是自己持久化对象。使用 SharedPreferences 是一种常见的方法。

====

所以总而言之,我建议通过 Intent 将对象从 activity 传递到 activity。用于启动 activity 的意图总是在重新创建 activity 时完全重新构成,即使在进程 kill/re-launch.

的情况下也是如此