2014-06-12 5 views
-1

사용자가 수행 할 수있는 몇 가지 동작을 모니터링해야하는 모바일 애플리케이션을 개발 중입니다. 내가 가진 문제 중 하나는 배터리 성능이 낮다는 것입니다. 궁금한 점은 모듈러 아키텍처와 여러 가지 서비스를 각각의 용도로 사용하는 것이 가장 좋으며 모든 데이터를 캡처하는 서비스가 하나만 있어야한다는 것입니다.서비스의 Android 개발 모듈 방식

10이나 11과 같이 많은 서비스를받을 때 겪는 일은 매우 모듈 식이지만 배터리 성능이 매우 낮다는 것입니다.

어떤 프로그래밍 유형을 사용해야하며 그 이유는 무엇입니까?

나는 그림을 찍고, 사용자 위치를 얻고, 진폭을 측정하고, 가속도계 값을 얻고, sms 및 mms 콘텐츠 공급자에 액세스하는 것을 말합니다.

서비스 데이터를 가져 와서 서버로 보내는 서비스도 있습니다. 다음은 샘플 코드입니다.

@Override 
    public void onCreate() { 
     Log.e(TAG, "onCreate"); 
     Intent intent = new Intent(this, WorkingService.class); 
     PendingIntent pintent = PendingIntent.getService(
       getApplicationContext(), 0, intent, 0); 
     AlarmManager alarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     alarm.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 
       15000, pintent); 

    } 

이 코드는이 클래스의 onstart 명령을 15 초마다 호출합니다.

@SuppressWarnings("static-access") 
    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     Log.e(TAG, "onStartCommand"); 
     super.onStartCommand(intent, flags, startId); 

답변

0

배터리 수명에 영향을주는 서비스의 수는 중요하지 않습니다. 더 중요한 것은 이러한 서비스가 무엇을하고 어떻게 시작하는지입니다.

예를 들어 사용자의 위치를 ​​모니터링하는 서비스가있는 경우 위치를 폴링하는 타이머에서 서비스를 시작하지 마십시오. OS에서 지오 펜싱 기능을 사용하십시오 (here 참조). 이것은 내가 항상 보는 실수 다.

일반적으로 알람 관리자를 사용하여 서비스를 실행하지 마십시오. 그러면 배터리가 소모됩니다. 인 텐트, 브로드 캐스트 이벤트 또는 UI와의 사용자 상호 작용에 대한 응답을 사용합니다.

"사용자가 할 수있는 행동"에 대해 언급하지 않았으므로 그보다 구체적으로하기가 어렵습니다.

+0

나는 서비스 유형을 추가하기 위해 편집했는데, 서비스에 바인딩하고 타이머가 있고 다른 서비스 방법에서 투표하는 서비스가 있기 때문에 아마도 내 문제입니다. – JoaoFilipeClementeMartins