2016-12-20 2 views
0

사용자가 앱을 사용하지 않아도 영원히 계속 실행해야하는 (스마트 시계에서) 서비스를 만들려고합니다. 주된 목적은 음성 인식을 위해이 서비스를 사용하는 것입니다. 따라서 사용자가 특정 단어를 말할 때마다 앱은 Google 음성처럼 응답 할 수 있어야합니다.서비스를 android wear에서 영원히 실행하는 방법

그러나 테스트 목적으로 로그에 정수를 인쇄하지만 한 번만 실행됩니다. 그건 서비스가 영원히 돌아가고 있지 않다는 것을 의미합니다.

내 서비스 코드 :

public class VoiceService extends Service { 

private IBinder mBinder = new VoiceBinder(); 
int i = 1; 
public VoiceService() { 
} 

@Override 
public void onCreate() { 
    super.onCreate(); 
    updateLog(); 
} 

public void updateLog() { 
    ++i; 
    Log.v("DATA", Integer.toString(i)); 
} 
@Override 
public IBinder onBind(Intent intent) { 
    // TODO: Return the communication channel to the service. 
    return mBinder; 
} 


//inner helper class 
public class VoiceBinder extends Binder { 

    //constructor 
    VoiceService getService() { 
     return VoiceService.this; 
    } 
} 
} 

내 MainActivity 번호 :

serviceConnection = new ServiceConnection() { 
     @Override 
     public void onServiceConnected(ComponentName componentName, IBinder iBinder) { 
      VoiceService.VoiceBinder binder = (VoiceService.VoiceBinder) iBinder; 
      iBinder = (IBinder) binder.getService(); 
      MainActivity.this.voiceService = ((VoiceService.VoiceBinder)iBinder).getService(); 
     } 

     @Override 
     public void onServiceDisconnected(ComponentName componentName) { 
      voiceService = null; 
     } 
    }; 

    //bind service 
    bindService(new Intent(this, VoiceService.class), serviceConnection, getApplicationContext().BIND_AUTO_CREATE); 
    startService(new Intent(this, VoiceService.class)); 

AndroidManifest를 :

<service 
     android:name=".VoiceService" 
     android:enabled="true" 
     android:exported="false"> 

    </service> 

내 출력 :

12-20 22:27:20.307 23624-23624/? V/DATA: 2 
+0

은 당신이 생각하게를 그것은 한 번 이상 실행됩니까? –

+0

백그라운드에서 일부 코드를 실행하는 서비스 인 경우이 코드를 실행하면 안됩니까? – Nix

+0

서비스의 어느 부분이 영원히 계속 될 것이라고 생각하십니까? 확실히 onCreate는 서비스가 처음 생성 될 때만 호출됩니다. –

답변

1

가 장기 실행 전경 작업하는 문제가 발생하고 방해 할 수 있음을 언급하고있어서, 당신은 Running in a Background Service을 통과 할 수 있습니다 사용자를 귀찮게하고 시스템 오류를 일으킬 수있는 사용자 인터페이스의 반응. 이를 방지하기 위해 Android 프레임 워크는 백그라운드에서 실행되는 별도의 스레드에 작업을 분산하는 데 도움이되는 몇 가지 클래스를 제공합니다. 가장 유용한 것은 IntentService입니다.

그리고 또한 참고 :

앱 목표 안드로이드 5.0 (API 레벨 21), 당신은 백그라운드 서비스를 실행하는 JobScheduler를 사용해야하는 경우

. 최고의 응용 프로그램의 성능을

및 배터리 소모 최소화, 당신은 또한 다음과 같은 링크를 확인 할 수 있습니다 :

+0

. 나는 그렇게 할 것이다. 현재 나는 오류가 있습니다. 어떻게 든 CountDownTimer를 통해 코드를 계속 실행할 수는 있지만 특정 기간이 지나면 가비지 수집기가 메모리를 해제하고 CountDownTimer가 메서드 실행을 계속 유지하면서도 주 작업이 실행되지 않습니다. – Nix

0

오랜 시간 동안 백그라운드에서 서비스를 실행하는 것을 권장하지 않습니다. 특히 마이크를 사용하는 경우 특히 그렇습니다. Android Wear 시계는 배터리 수명이 제한적이므로 앱을 사용하는 모든 사용자에게 배터리 수명이 오래 걸립니다. 여기에 설명 된대로

대신, 사용자 정의 음성 액션을 구현 들여다 : https://developers.google.com/voice-actions/interaction/voice-interactions

+0

나는 그것이 배경에 있기를 바란다. 앱이 앞에 있지 않은 경우에도 사용자가 다른 앱을 실행중인 경우에도 마찬가지입니다. 따라서 배경 스레드는 특정 음성 명령을 처리 할 수 ​​있어야합니다. 시계가 잠자고 있어도 움직여야한다는 것이 중요합니다. – Nix

+0

StackOverflow에서 이전 코멘트를 편집 할 수 없기 때문에 다른 코멘트를 게시하고 있습니다. 시계가 제한된 배터리를 가지고 있다는 것을 알고 있습니다. 하지만 그것은 내 자신의 학습 경험을 위해 구현하고있는 무언가입니다. 그래서 문제가되어서는 안됩니다. 답장을 보내 주셔서 감사합니다. – Nix