如何在Android中永远运行服务

时间:2016-12-20 14:29:51

标签: android service wear-os

我正在尝试创建一个服务(在智能手表中),即使用户没有使用该应用程序也应该永远运行。主要目的是使用语音识别服务。因此,每当用户说出特定单词时,应用程序应该能够像谷歌语音一样响应。

但是,出于测试目的,我在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;
    }
}
}

我的主要活动代码:

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

2 个答案:

答案 0 :(得分:1)

您可能希望通过Running in a Background Service来提及

  

长时间运行的前台操作可能会导致问题并干扰用户界面的响应性,这会使用户烦恼,甚至可能导致系统错误。为了避免这种情况,Android框架提供了几个类,可以帮助您将操作卸载到在后台运行的单独线程上。其中最有用的是IntentService

并且还要注意:

  

如果您的应用定位到Android 5.0(API级别21),则应使用JobScheduler执行后台服务。

为了获得最佳应用性能并尽量减少电池耗尽,您可能还需要查看以下链接:

答案 1 :(得分:0)

我真的不建议长时间在后台运行您的服务,尤其是在使用麦克风的情况下。 Android Wear手表的电池续航时间有限,对于使用您应用的任何人来说,您都会产生较差的电池续航体验。

相反,请考虑实现自定义语音操作,如下所述: https://developers.google.com/voice-actions/interaction/voice-interactions