当前位置:  开发笔记 > Android > 正文

Android onHandleIntent和onStartCommand之间的区别

如何解决《AndroidonHandleIntent和onStartCommand之间的区别》经验,为你挑选了1个好方法。

我目前正在编写一个需要的android程序IntentService.当我将代码放在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);

Mauker.. 37

从文档来看:

IntentService执行以下操作:

创建一个默认的工作线程,该线程执行所有交付的意图,以onStartCommand()与应用程序的主线程分开.

创建一个工作队列,一次将一个意图传递给您的onHandleIntent()实现,因此您永远不必担心多线程.

在处理完所有启动请求后停止服务,因此您永远不必打电话stopSelf().

提供onBind()该返回的默认实现null.

提供默认实现onStartCommand(),将意图发送到工作队列,然后发送到您的onHandleIntent() 实现.

并且:

所有这些使得您需要做的就是实现 onHandleIntent()客户端提供的工作.(但是,您还需要为服务提供一个小构造函数.)

所以a IntentServiceService具有这些特殊属性的"自定义" .所以没有必要覆盖onStartCommand(),实际上,除非你使用常规类,否则你不应该这样做Service.

一些IntentService使用示例:

Activity.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.
    }
    //...
}

您还可以查看本教程或这一个有关更多信息ServiceIntentService.

另外,检查文档.



1> Mauker..:

从文档来看:

IntentService执行以下操作:

创建一个默认的工作线程,该线程执行所有交付的意图,以onStartCommand()与应用程序的主线程分开.

创建一个工作队列,一次将一个意图传递给您的onHandleIntent()实现,因此您永远不必担心多线程.

在处理完所有启动请求后停止服务,因此您永远不必打电话stopSelf().

提供onBind()该返回的默认实现null.

提供默认实现onStartCommand(),将意图发送到工作队列,然后发送到您的onHandleIntent() 实现.

并且:

所有这些使得您需要做的就是实现 onHandleIntent()客户端提供的工作.(但是,您还需要为服务提供一个小构造函数.)

所以a IntentServiceService具有这些特殊属性的"自定义" .所以没有必要覆盖onStartCommand(),实际上,除非你使用常规类,否则你不应该这样做Service.

一些IntentService使用示例:

Activity.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.
    }
    //...
}

您还可以查看本教程或这一个有关更多信息ServiceIntentService.

另外,检查文档.


哇,这非常彻底.很好的答案!
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有