android服务:进程未启动
我有一个测试android的简单应用程序:服务的进程属性。因此,我的服务如下所示:android服务:进程未启动,android,service,process,manifest,Android,Service,Process,Manifest,我有一个测试android的简单应用程序:服务的进程属性。因此,我的服务如下所示: public class MyService extends IntentService { static final String TAG = "MyService"; public MyService() { super("MyService"); } @Override public void onCreate() { super.on
public class MyService extends IntentService {
static final String TAG = "MyService";
public MyService() {
super("MyService");
}
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG,"onCreate()");
}
@Override
protected void onHandleIntent(Intent intent) {
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
doJob();
return START_STICKY;
}
private void doJob() {
new Thread(new Runnable() {
@Override
public void run() {
Log.i(TAG,"job started");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG,"job stopped");
stopSelf();
}
}).start();
}
}
我尝试从以下活动开始服务:
findViewById(R.id.startServiceBtn).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startService(new Intent(getApplicationContext(),MyService.class));
}
});
一切正常。现在,我将把android:process=:service属性添加到清单中的服务声明中。然后服务就不能启动了。那么,为什么会这样?我应该在单独的流程中更改什么来启动服务?我认为您必须执行此任务,即在OnHandleContent中调用dowork方法。因为您的服务类扩展了意图服务而不是服务
public class MyService extends IntentService {
static final String TAG = "MyService";
public MyService() {
super("MyService");
}
@Override
protected void onHandleIntent(Intent intent) {
doJob();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
}
private void doJob() {
new Thread(new Runnable() {
@Override
public void run() {
Log.i(TAG,"job started");
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i(TAG,"job stopped");
stopSelf();
}
}).start();
}
}哦,很抱歉,这是一个愚蠢的错误-我必须在android监视器选项卡中选择新流程,这一切都要感谢您是如何检查您的服务是否运行的?这不是您的问题,但您使用的intent service是错误的。对于意图服务,您不应该在onStartCommand中执行任何操作-它应该全部在onHandleIntent中。在onStartCommand中执行此操作将破坏IntentService处理请求的内置方法。@F43nd1r我正在使用studio中的android monitor选项卡进行检查,该服务应启动doJob方法,该方法将消息打印到logcat。若我看到这些消息,那个么这意味着服务正在运行我通过从onCreate添加日志消息更新的代码。此消息未出现在Logcate中您是对的,他没有正确地实现它,但这不是他的问题-它将按他编写的方式运行,只是无法正确处理意图。@Sandeep Kumar将doJob从onStartCommand替换为OnHandleContent没有帮助