2016-12-14 2 views
0

sqlite에 데이터를 저장 한 안드로이드 응용 프로그램이 있습니다. 데이터베이스 테이블의 경로 목록을 유지합니다. 화면의 활성 경로에 데이터를 표시합니다/프로세서를 릴리스하려면 서비스 내부의 정적 목록을 사용합니다. 프로세서를 릴리스하려면 서비스 내부의 정적 목록을 사용합니다. 서버에서 데이터를 수신 할 때 목록을 변경합니다.정적 varialble android 서비스를 제거

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를 사용합니다.

이제 작업이 안드로이드 개발 표준을위한 서비스를 변경합니다. 정적 필드를 제거하고 이제 인 텐트 (startService (intent))를 통해 서비스를 실행합니다. routeTaskList 객체에 대한 정적 setter 및 getter를 제거 할 수 있습니까?

+0

변수'routeTaskList'에서'static' 속성을 제거하고 그것을위한 setter/getter에서'static' 속성을 제거하십시오. 이제 새로운 NetworkService() 객체를 인스턴스화하고 객체에 getter와 setter를 호출 할 수 있습니다. –

+0

하지만 서비스를 여러 번 시작해야합니다. 정적 객체는 예를 들어 하나입니다. statService 이후에는 다른 객체가 생깁니다. –

+0

@ j.seashell 안드로이드'Service'를'new'로 인스턴스화 할 수는 없습니다. Android 프레임 워크 만 Android 구성 요소를 인스턴스화 할 수 있습니다! –

답변

0

startService() 호출에서 사용하는 Intent에서 Service에 추가 작업 목록을 제공 할 수 있습니다. 이것은 정적 설정기를 대체합니다.

작업 목록을 얻는 것이 더 복잡합니다. 옵션 :

  1. 당신은 당신이 작업 목록을 방송하는 Service를 묻는 IntentstartService()를 부를 수 AIDL을 사용하고 Service에 결합하여 다음 작업
  2. 의 목록을 얻을 수있는 방법을 호출 할 수 있습니다. Service.onStartCommand()에서 추가 작업으로 작업 목록이 포함 된 Intent 브로드 캐스트를 보낼 수 있습니다.
  3. Service스티커 브로드 캐스트 Intent을 보내면 목록이 변경 될 때마다 작업 목록이 포함될 수 있습니다. 앱은 registerReceiver() 콜을 사용하여 가장 최근에 전송 된 스티커 방송을 읽습니다.