2016-08-30 1 views
0

Я создаю приложение с помощью функции переднего плана. Служба запускается в другом процессе и потоке.Переменные приложения в службе

Класс приложения имеет массив и имеет открытый метод getArray. Служба может получить доступ к приложению и методу вызова getArray.

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

Как я могу обновить массив в сервисе?

на обслуживание:

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    if(mThread != null) 
     mThread.interrupt(); 
    mApplication = (Application) getApplication(); 
    mTaskManager = mApplication.getTaskManager(); 

    TaskArray lTasks = mTaskManager.getAll(); 

    // always return same size 
    Log.d(mLogTag, "onStartCommand " + lTasks.size()); 

    createThread(); 

    mThread.start(); 
    super.onStartCommand(intent, flags, startId); 
    return START_STICKY; 
} 

РЕЗУЛЬТАТ:

я нашел причину получить копию объекта Applicaton в моем приложении. Это происходит потому, что getApplicationContext() возвращает контекст одного глобального объекта приложения текущего процесса.

Для каждого процесса создается копия объекта приложения.

+0

Итак, ваш вопрос заключается в том, как вы можете обновлять значения архаристов из службы? –

+0

У вас может быть двусторонняя связь между клиентским приложением и удаленным сервисом с помощью Messenger –

+0

Piyush Kukadiya, что вы имеете в виду в отношении Messenger? –

ответ

1

Получить контекст класса приложений с помощью getApplicatonContext() в классе обслуживания, написав эту строку ((YourApplicatonClassName) getApplicationContext()). GetArray() и установить новое значение данных. Лучше, если возможно, поделиться своим кодом, чтобы я мог понять, чего вы точно хотите. Спасибо

+0

Я делаю это, но метод getArray возвращает мне старый массив. Как будто при запуске службы создается копия класса приложения. –

+0

Тогда я думаю, что вы должны сделать метод setArrayValue(), setter и установить для него новые значения после очистки Array со старыми значениями. – LUshPUsh

+0

Спасибо, я попробую это, но я хочу понять, почему он создает копию и как она работает внутри. –