删除静态varialble android服务

时间:2016-12-14 19:53:02

标签: android sqlite android-service

有一个android应用程序将数据存储到sqlite中。我在数据库表中保留了一个路由列表。我在屏幕上显示活动路由上的数据/为了释放处理器,我在服务中使用静态List。为了释放处理器,我在服务中使用静态List。我从服务器接收数据时更改列表。

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();

我的应用程序通常使用routeTaskList而不是sql查询数据表。

现在的任务是改变服务,为Android开发标准。我删除了静态字段,现在,我通过意图运行服务(startService(intent))。如何删除routeTaskList对象的静态清除程序和getter?

1 个答案:

答案 0 :(得分:0)

您可以在Service来电Intent中为startService()提供任务列表作为额外内容。这将取代您的静态setter。

获取任务列表更复杂。选项:

  1. 您可以使用AIDL并绑定到Service,然后调用方法来获取任务列表
  2. 您可以使用startService()致电Intent,要求Service广播任务列表。在Service.onStartCommand()中,您可以发送广播Intent,其中包含作为附加内容的任务列表。
  3. 您可以让Service发送粘性广播Intent,其中包含每次更改列表时的任务列表。然后,您的应用会使用registerReceiver()电话来阅读最近发送的粘性广播。