2016-08-30 55 views
0

我使用前臺服務創建應用程序。該服務在另一個進程和線程中運行。服務中的應用程序變量

Application類有一個數組並且具有公共方法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; 
} 

結果:

我發現越來越的一個應用對象的副本,在我的應用程序的原因。這是因爲getApplicationContext()返回當前進程的單個全局應用程序對象的上下文。

爲每個進程創建一個應用程序對象的副本。

+0

所以你的問題是你如何可以從服務更新arraylist值? –

+0

您可以在使用Messenger的客戶端應用程序和遠程服務之間進行雙向溝通 –

+0

Piyush Kukadiya,您對Messenger的含義是什麼? –

回答

1

通過編寫此行由服務類使用getApplicatonContext()獲取應用類的上下文((YourApplicatonClassName)getApplicationContext())。的getArray()並設置新的數據值。 如果可能的話,分享你的代碼更好,這樣我就可以理解你確切想要的東西。 謝謝

+0

我正在這樣做,但方法getArray返回我的舊數組。就像服務啓動時一樣,它會創建一個應用程序類的副本。 –

+0

然後,我認爲你應該使setArrayValue()方法,setter,並設置新的值後,用舊值清除數組。 – LUshPUsh

+0

謝謝,我會試試這個,但是我想知道它爲什麼創建一個副本,以及它是如何工作的。 –