2016-12-14 44 views
0

有android應用程序存儲數據到sqlite。我在數據庫表中保存了一個路由列表。我在屏幕上顯示活動路由上的數據/爲了釋放處理器,我使用了靜態List內部服務。要釋放處理器,我使用靜態List內部服務。我從服務器接收數據時更改列表。刪除靜態varialble安卓服務

public class NetworkService extends Service{ 

    private static NetworkService instance = null; 

    private static List<RouteTask> routeTaskList; 
    private static LoadRoutesTask loadRoutesTask; 

    private static RouteChangedListener rtListener ; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     if (instance == null) { 
      instance = this; 

      NetworkManager.updateNetworkInfo(this); 
      NetworkManager.setNetworkListener(this);  
     } 
    } 

    public static Context getCurrentContext() { 
     return instance; 
    } 

    public static boolean hasInstance() { 
     return instance != null; 
    } 

    public static void setRouteTaskList(List<RouteTask> rtList) 
    {  
     routeTaskList = rtList ;   
    } 

    public static List<RouteTask> getRouteTask(){ 
     return routeTaskList; 
    } 

} 

在實際應用中,我可以設置值

NetworkService.setRouteTaskList(list); 

或獲得價值:

List<RouteTask> = NetworkService.getRouteTaskList(); 

我的應用程序通常使用的,而不是數據表的SQL查詢routeTaskList。

現在的任務是更改服務,爲android開發標準。我刪除了靜態字段,現在,我通過intents運行服務(startService(intent))。我如何刪除routeTaskList對象的靜態setter和getter?

+0

從變量'routeTaskList'中移除'static'屬性,並從setter/getter中移除'static'屬性。現在,你可以實例化一個新的NetworkService()對象,並調用你的對象 –

+0

上的getter和setter,但是我必須多次啓動服務。靜態對象是一個例子。在statService之後它會有另一個對象 –

+0

@ j.seashell你絕對肯定不能使用'new'實例化一個Android'Service'。只有Android框架才能實例化Android組件! –

回答

0

可以提供Service與任務列表作爲您在startService()呼叫使用Intent演員。這取代了你的靜態setter。

獲取任務列表比較複雜。選項:

  1. 你可以使用AIDL並綁定到Service,然後調用一個方法來獲得任務
  2. 列表你可以稱之爲startService()Intent,詢問Service播出任務列表。在Service.onStartCommand()你可以發送廣播Intent其中包含的任務列表作爲額外。
  3. 您可以讓Service發送粘貼廣播Intent其中包含每次列表更改時的任務列表。然後,您的應用將使用registerReceiver()呼叫來讀取最近發送的粘性廣播。