2

RecyclerView 내에 표시되는 작업 목록이 있습니다. Android 서비스 상호 작용

  • 작업이 완료 될 말을하고 활동에 바인드 된 서비스를 중지 할 수있는 완료 버튼을 클릭하면 크로노 미터를 표시

    • 재생 버튼 : 각 작업에 대한 나는 포함하는 활동을 제시한다.
    • 사용자가 나중에 다시 시작 함과 동시에 다양한 작업을 실행하는 작업을 중지 할 수 있습니다

    다양한 정보를 제공합니다.

    작업 수명 기간 동안 백그라운드에서 각 크로노 미터가 실행되도록 서비스를 구현해야합니다.

    나는 여기에 가이드 라인을 따라 : https://developer.android.com/guide/components/services.html

    가 어떻게 작업마다 고유 한 서비스를 만들 수 있으며, 이전 작업이 사용자에 의해 선택 될 때 (경과 시간) 다시 크로노 미터를 표시합니다. 활동을 초 단위로 업데이트하는 적절한 방법은 무엇입니까?

    public class TaskService extends Service { 
        public static final String TAG = "TASK SERVICE"; 
    
        public static final String ACTION_TIMER = TaskService.class.getName() + "TIMER"; 
    
        private IBinder mBinderTask = new TimerTaskBinder(); 
    
        private Chronometer mChronometer; 
    
        @Override 
        public int onStartCommand(Intent intent, int flags, int startId) { 
         Log.d(TAG, "onStartCommande: "); 
    
         mChronometer = new Chronometer(this); 
         mChronometer.setBase(SystemClock.elapsedRealtime()); 
         mChronometer.start(); 
    
         return START_STICKY; // Will be explicity started and stopped 
        } 
    
    
        public String getTimestamp() { 
         long elapsedMillis = SystemClock.elapsedRealtime() - mChronometer.getBase(); 
         int hours = (int) (elapsedMillis/3600000); 
         int minutes = (int) (elapsedMillis - hours * 3600000)/60000; 
         int seconds = (int) (elapsedMillis - hours * 3600000 - minutes * 60000)/1000; 
         int millis = (int) (elapsedMillis - hours * 3600000 - minutes * 60000 - seconds * 1000); 
         return hours + ":" + minutes + ":" + seconds + ":" + millis; 
        } 
    
        @Override 
        public IBinder onBind(Intent intent) { 
         Log.d(TAG, "onBind: "); 
         return mBinderTask; 
        } 
    
        public class TimerTaskBinder extends Binder { 
         public TaskService getService() { 
          return TaskService.this; 
         } 
        } 
        @Override 
        public void onDestroy() { 
         super.onDestroy(); 
         Log.d(TAG, "onDestroy: "); 
    
        } 
    } 
    

    감사

  • 답변

    0

    난 그냥 타이머를 추적하는 서비스를 만들 것입니다. SystemClock.elapsedRealtime()을 사용하여 작업 시작 시간과 예상 종료 시간을 저장하고 recyclerview가 표시 될 때마다 계산 된 시간으로 크로노 미터를 설정하는 것이 좋습니다.

    +0

    서비스와 상호 작용하는 방법을 이해할 때 사용자 위치 및 동작과 같은 다른 데이터를 수집하려고합니다. –

    +0

    운동을 말할 때 사용자 활동 (걷기, 운전하기 등)을 의미합니까? –

    +0

    예 GPS 모니터링 –

    0

    작업 당 Service을 만들지 마십시오. Service을 하나 만들고 작업 목록을 관리하게하십시오.

    Service과 여러 선택이있는 Activity 사이의 통신에 :

    • 사용 BroadcastReceiver을. ActivityBroadcastReceiver을 만들고 Service에 의해 간격으로 전송되는 브로드 캐스트를 수신합니다. ServicesendBroadcast()에 관심있는 이벤트를 브로드 캐스트합니다. 힌트 : ActivityService이 동일한 OS 프로세스에서 실행중인 경우 LocalBroadcastManager (좀 더 효율적입니다)을 사용할 수 있습니다.
    • 바운드 Service을 사용하십시오. ActivityService에 바인딩하고 Service은 필요에 따라 Activity의 메소드를 콜백 할 수 있습니다.
    • Green Robot의 EventBus 라이브러리와 같은 "이벤트 버스"구현을 사용하십시오.