2

我在一个有许多活动的应用程序中工作,并且大多数活动共享多个对象,所以我通过扩展 android Application 类来创建 MyApplication 类来存储选定的对象以共享。但是在访问提供程序/帮助程序类中的这些对象时,我感到非常不舒服,因为提供程序中需要上下文来获取 Application 的实例

所以我计划在 MyApplication 类中创建一个名为 SelectionProvider 的静态类来存储选定的对象,然后我可以在不创建 MyApplication 实例的情况下以静态方式访问这些对象。

MyApplication 类与静态内部类如下

class MyApplication extends Application {
    public static final String TAG = "MyApplication";



    public static class SelectionProvider {
        private static UserObj userObj;
        private static TownObj townObj;
        private static StoreObj storeObj;

        public static UserObj getUserObj() {
            return userObj;
        }

        public static setUserObj(UserObj userObj) {
            this.userObj = userObj;
        }

        public static TownObj getTownObj() {
            return townObj;
        }

        public static setTownObj(TownObj townObj) {
            this.townObj = townObj;
        }

        public static StoreObj getStoreObj() {
            return storeObj;
        }

        public static setStoreObj() {
            this.storeObj = storeObj;
        }
    }
}

这是正确的方法吗?如果不是为什么?

将在整个应用程序生命周期中驻留选定的对象(存储在内部类中)还是会在任何地方销毁?

4

3 回答 3

1

只要您没有运行需要访问此对象的多个进程,此方法或其他地方的静态值应该可以正常工作并在应用程序的整个生命周期内持续使用。如果是这种情况,您应该使用服务来处理事务。

于 2012-11-26T11:52:39.420 回答
0

我不会将其设计为内部类。我会将 SelectionProvider(以及您需要的任何其他类)创建为自己的单独类,并在您的 MyApplication 类的 onCreate 方法中实例化它。

您不应该实例化应用程序对象,因为它可以随时通过调用 getApplication() 并将其转换为您的应用程序类(例如 (MyApplication)getApplication();)来访问它,然后您可以访问由该类创建的任何对象。

如果这些类存在数据持久性问题,请考虑将它们的值存储在 SQLLite 中或作为共享首选项,因为如果需要资源,Android 可能会随时终止您的应用程序在后台运行。

于 2012-11-26T12:04:53.247 回答
0

我会创建一个自己的单例类:

public class Data {

    /* Start of singleton block */

    private static Data data = new Data();

    private Data(){
    }

    public static Data getInstance(){
    }

    /* End of singleton block */ 

    private SelectionProvider selectionProvider;

    public SelectionProvider getSelectionProvider(){
       return selectionProvider;
    }

    /* other necessary methods (get, set) and classes below */

}

这样您就可以使用 Data.getInstance().getSelectionProvider(). 这将在活动应用程序期间可用,但您可能希望在用户离开应用程序一段时间后再回来时构建一些数据的持久存储:

public SelectionProvider getSelectionProvider(){
    if(selectionProvider == null)
        selectionProvider = readSelectionProviderFromPersistantStorage();

    return selectionProvider;
}
于 2012-11-26T12:09:32.607 回答