开发者

Store Objects in ApplicationContext

When my application goes to background , my (static and singleton) objects are cleared. So I tried to store these objects in Applicaton Context . I am using the following code.

Accounts.create(getApplicationContext()) will be called once to store the accounts instance.

Is that possible(reliable) to store objects in Application Context ? I am not sure the following way is correct or not . please guide ..

   public class Init extends Application {
    private Hashtable<Object, Object> globalStore = new Hashtable<Object, Object>();

    public void putToGlobalStore(Object key, Object value) {
        globalStore.put(key, value);
    }

    public Object takeFromGlobalStore(Object key) {
        return this.globalStore.get(key);
    }

    public void removeFromGlobalStore(Object key) {
        this.globalStore.remove(key);
    }

    public boolean containsInGlobalStore(Object key) {
        return this.globalStore.containsKey(key);
    }
}

public class Accounts {

        protected Accounts(String name, Context context) {
            Init init = (Init) applicationContext;
                init.putToGlobalStore(name, this);
        }

        private static Init applicationContext;

        public static void create(Context context) {

            if (context instanceof Application)
                applicationContext = (Init) context;
            else
                applicationContext = (Init) context.getApplicationContext();

            if (applicationContext.containsInGlobalStore(GLOBAL_NAME))
                Logger.log("Warning " + GLOBAL_NAME
                        + " is already cre开发者_开发问答ated. This will remove all old datas");

            new Accounts(GLOBAL_NAME, applicationContext);


        }

        private static final String GLOBAL_NAME = "accounts";

        public static Accounts getInstance() {

            try {
                return (Accounts) applicationContext
                        .takeFromGlobalStore(GLOBAL_NAME);
            } catch (Exception e) {
                Logger.log("GLOBAL_NAME Lost");
                return null;
            }

        }

Please help.


You should know that the application context itself gets destroyed if left unused for a long time in the background. So there is no guarantee that your static and singleton objects will not be cleared when the app is in background. Instead what you can do is persist your objects from time to time (either in a flat-file or shared preference or database) and restore them in the onCreate method of the Application class


I have been using this method in my application and i didn't see any problem unless my process gets killed by the OS or if there is a crash in my application and my app gets restarted.

If you think whatever data you are storing is valid for only life time of a program why don't you override OnCreate of Application object and create all your singletons there. This way you can always make sure your application has all singletons before your app starts functioning.


Application class is not permanent.

If App process killed, Application class private member variable data loss.

Using Shared Preferences.


I know this question was asked a long time ago, but here's a good article that suggests using the Application object to store data is generally not a sound design methodology.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜