2016-12-20 11 views
0

私はサービスを(スマートウォッチで)作成しようとしていますが、ユーザーがそのアプリケーションを使用していなくても永遠に実行する必要があります。主な目的は、サービスを音声認識に使用することです。だから、ユーザーが特定の単語を言うたびに、アプリはGoogleの声のように応答する必要があります。サービスをAndroidで永久に実行する方法

しかし、テスト目的では、Logに整数を出力していますが、一度だけ実行します。サービスが永遠に実行されていないことを意味します。

マイサービスコード:

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です。

そして、また次の点に注意してください

アプリの目標は、Android 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

関連する問題