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

我有一个测试android的简单应用程序:服务的进程属性。因此,我的服务如下所示:

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没有帮助