2016-12-20 10 views
0

Я пытаюсь создать сервис (в интеллектуальных часах), который должен работать вечно, даже если пользователь не использует приложение. Основная цель - использовать услугу распознавания речи. Поэтому всякий раз, когда пользователь говорит конкретное слово, приложение должно реагировать так же, как голос Google.Как запустить службу в android wear forever

Однако для целей тестирования я печатаю целое число в журнале, но оно выполняется только один раз. это означает, что служба не работает навсегда.

Мой код услуги:

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

Смежные вопросы