本文介绍如何直接在adb中启动服务(无需手动打开app)。
一、创建服务类
首先创建一个服务类并在启动的时候打印内容到Log方便观察,代码如下:
public class MyService extends Service {
public MyService() {
}
@Override
public IBinder onBind(Intent intent) {
// TODO: Return the communication channel to the service.
throw new UnsupportedOperationException("Not yet implemented");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("============","WTF");
return super.onStartCommand(intent, flags, startId);
}
}
二、Mainfest文件中
<service
android:name=".MyService"
android:enabled="true"
android:exported="true">
</service>
三、ADB启动服务
输入如下命令启动服务:
adb shell am startservice 包名/服务类路径
如图:
表示启动成功,编译器也会打印信息如下:
四、防止重复启动服务
若第二次启动同一个服务则会调用再次调用onStartCommand,而onCreate只会在第一次启动的时候调用,所以为了避免重复执行相同的逻辑代码,可以把逻辑代码放在服务的onCreate中执行。
代码如下:
@Override
public void onCreate() {
Log.i("============","start service");
try {
Thread.sleep(5000);
}catch (Exception e)
{
}
super.onCreate();
}
Activity中启动服务:
Intent intent = new Intent(this,MyService.class);
startService(intent);
手动启动app后打印出信息,然后再在adb中启动后没有重复输出信息,验证成立。