我正在写一个需要IntentService
的android程序。当我将代码放入onHandleIntent
函数时,代码不会运行,但它不会在MainActivity
中给出错误。但当我将代码复制到onStartCommand
时,它运行得很好。
问题是我想知道onHandleIntent
和onStartCommand
之间有什么区别。谢谢。
代码:
在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 tutorial或this one以了解有关
Service
和IntentService
的更多信息。另外,检查the docs。