Совместное использование общих предпочтений между действиями и службами? - PullRequest
0 голосов
/ 20 января 2019

Я хотел бы использовать одни и те же пары ключ / значение между моей деятельностью и моими службами.Поскольку все они имеют разные контексты, я предполагаю, что мне нужно разделить один конкретный контекст между всеми ними.

Это не может быть контекст любого из действий, поскольку данное действие может не сохраняться в памяти все время,(особенно верно, поскольку моя фоновая служба запускается при запуске телефона, поэтому никаких действий не происходит вообще, пока пользователь не нажмет значок приложения.)

Я думал о создании установщика / получателя для статической переменной контекста в классеЯ использую для чтения / записи переменную контекста следующим образом:

public class temp_shared_context {

public static Context ctx = null;

public static Context getCtx() { return ctx; }

public static void setCtx(Context ctx) { temp_shared_context.ctx = ctx; }
}

Проблема, с которой я сталкиваюсь, заключается в том, что при запуске приложения ctx является нулевым, и никто не может использовать общие предпочтения, пока выделенный сервис не используетустановщик для записи переменной ctx.

Я пытался изменить свой геттер следующим образом:

    public static Context getCtx() {
    while (ctx == null) {}
    return ctx;
}

Но это просто приводит к зависанию моего приложения.

Что быправильный способ обязательно решить эту проблему?(может быть, есть что-то более очевидное, чем использование сеттеров / геттеров или синглетонов)

1 Ответ

0 голосов
/ 20 января 2019

Вы можете использовать PreferenceManager.getDefaultSharedPreferences(getContext());, как показано ниже:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
        sharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString("variable", value);
        editor.apply();

и вы можете получить значение из своего приложения в любом месте, как показано ниже:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
        String value = sharedPreferences.getString("variable", "default_value");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...