我想在Service
中开始Android
:
Log.d("BLE", "Start Service");
Intent gattServiceIntent = new Intent(this, BluetoothLeService.class);
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
startService(gattServiceIntent);
Log.d("BLE", "Service Started");
在BluetoothLeService
我覆盖onStartCommand()
功能,这意味着我会在服务启动时看到log
public class BluetoothLeService extends Service {
....
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Let it continue running until it is stopped.
Toast.makeText(this, "Service Started", Toast.LENGTH_LONG).show();
Log.d("BLE", "onStartCommand");
return START_STICKY;
}
但log
如下:
07-14 21:30:23.676: D/BLE(28327): Start Service
07-14 21:30:23.676: D/BLE(28327): Service Started
但是onStartCommand()
从未出现在log
中。我该如何开始服务?
答案 0 :(得分:1)
您要做的是首先绑定到服务然后启动它。 Documentation说:
绑定服务是允许应用程序组件通过调用bindService()绑定到它以创建长期连接(并且通常不允许组件启动它)的服务通过调用startService())。
通过调用 bindService()创建的服务的lifecycle与通过调用 startService()创建的服务相比具有不同的回调方法(请参阅流程提供的页面上的图表)。因此,对于使用 bindService()调用创建的服务,没有 onStartCommand()方法,这就是它从未被调用的原因。
通常的做法是首先启动一个服务,然后绑定它(在这种情况下必须适当地实现所有钩子方法)。如果你这样做,将会调用 onStartCommand()。
修改强>
如何启动服务?
您确实启动了该服务。在调用 bindService()后,它正在运行(当然,如果使用IBinder返回正确实现onBind())。
...但onStartCommand newer出现在日志中
由于上述原因,情况如此。
答案 1 :(得分:0)
您是否在清单中声明了BluetoothLeService?
<service android:enabled="true" android:name=".BluetoothLeService" />
除非声明我显示,否则服务将是可运行的。
另外:您确定要同时调用bind并启动服务吗?
bindService(gattServiceIntent, mServiceConnection, BIND_AUTO_CREATE);
startService(gattServiceIntent);
这是可能的,但相当不常见..
答案 2 :(得分:0)
注释Toast并再试一次。这可能是你崩溃的根源。
Toast.makeText(this,&#34; Service Started&#34;,Toast.LENGTH_LONG).show();