我正在写一个需要IntentService的android程序。当我将代码放入onHandleIntent函数时,代码不会运行,但它不会在MainActivity中给出错误。但当我将代码复制到onStartCommand时,它运行得很好。
问题是我想知道onHandleIntentonStartCommand之间有什么区别。谢谢。
代码:
onHandleIntent中:

System.out.println("SERVICE STARTED! ! !");
//System.out.println(intent.getBooleanExtra("once", Boolean.FALSE));
if (intent.getBooleanExtra("once", Boolean.FALSE)) {
    Check();
}
mHandler.postDelayed(mRunnable, 3000);

最佳答案

the docs开始:
IntentService执行以下操作:
创建一个默认的工作线程,它执行传递到onStartCommand()的所有意图,并与应用程序的主线程分开。
创建一个一次传递一个意图到onHandleIntent()实现的工作队列,这样您就不用担心
多线程。
在处理完所有启动请求后停止服务,因此您不必调用stopSelf()
提供返回onBind()的默认null实现。
提供onStartCommand()的默认实现,将意图发送到工作队列,然后发送到您的onHandleIntent()
实施。
以及:
所有这些加起来就是你所需要做的就是实现
onHandleIntent()完成客户提供的工作。(不过,你
还需要为服务提供一个小型构造函数。)
因此IntentService是具有这些特殊属性的“自定义”Service。所以不需要重写onStartCommand(),实际上,除非使用常规的Service类,否则不应该这样做。
IntentService用法示例:
活动.java

Intent it = new Intent(getApplicationContext(), YourIntentService.class);
it.putExtra("Key", "Value");
startService(it);

YourIntentService.java
public YourIntentService() {
    super("YourIntentService");
}

@Override
protected void onHandleIntent(Intent intent) {

    if (intent != null) {
        String str = intent.getStringExtra("key");
        // Do whatever you need to do here.
    }
    //...
}

您还可以查看this tutorialthis one以了解有关ServiceIntentService的更多信息。
另外,检查the docs

10-02 20:39