Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:服务活动通信_Android_Android Intent_Android Activity_Android Service - Fatal编程技术网

Android:服务活动通信

Android:服务活动通信,android,android-intent,android-activity,android-service,Android,Android Intent,Android Activity,Android Service,我只是在学习如何使用服务,有点困了 我有一个IntentService,用于下载一个文件队列。我有一个活动,可以打开和关闭应该下载的文件。下载完文件后,我更新了我的SharedReferences中的布尔值。我有两个问题: 启动服务的原始活动很可能会消失,但很可能该活动的新实例已启动。在这种情况下,我需要向该活动发送一条消息,以检查SharedReferences并相应地更新其UI。因此,我的问题是:如何向可能正在运行或可能未运行的活动发送消息? 活动可以在服务运行时打开和关闭应下载的文件。这造

我只是在学习如何使用服务,有点困了

我有一个
IntentService
,用于下载一个文件队列。我有一个
活动
,可以打开和关闭应该下载的文件。下载完文件后,我更新了我的
SharedReferences
中的布尔值。我有两个问题:

  • 启动服务的原始活动很可能会消失,但很可能该活动的新实例已启动。在这种情况下,我需要向该活动发送一条消息,以检查SharedReferences并相应地更新其UI。因此,我的问题是:如何向可能正在运行或可能未运行的活动发送消息?

  • 活动可以在服务运行时打开和关闭应下载的文件。这造成了两种情况。如果服务未运行且文件已打开,则我希望在启动时将此文件添加到其队列中。如果服务正在运行并且文件被打开,那么我只想将文件添加到它的队列中。如果服务没有运行,并且文件被关闭,我已经有了删除它的方法。但是,如果服务正在运行且尚未下载该文件,我希望将其从其队列中删除,或者如果它当前正在下载,则停止下载。我把应该下载的文件保存在我的SharedReferences中,所以我想所有这些都可以通过向服务发送消息来检查SharedReferences来解决。这引出了我的第二个问题:如何获取服务是否正在运行,如果正在运行,如何向其发送消息?


  • 你可能想要的是某种绑定服务。 您可以向它发送消息,也可以从中接收消息。 因此,当您的活动再次启动时,它可以再次绑定到服务,并在下载完成后接收回调。 此外,活动还可以向服务发送消息以启动或停止下载。 好的方面是:当您绑定到服务并且它还没有运行时,服务就会启动


    希望这有帮助:)

    您可能想要的是某种绑定服务。 您可以向它发送消息,也可以从中接收消息。 因此,当您的活动再次启动时,它可以再次绑定到服务,并在下载完成后接收回调。 此外,活动还可以向服务发送消息以启动或停止下载。 好的方面是:当您绑定到服务并且它还没有运行时,服务就会启动


    希望这有帮助:)

    问题1和问题2的可能答案:

    使用广播接收机:

    对于问题1:您可以将您的活动注册到您将定义的某种接收器,并在需要广播时发送给它。如果活动已注册到广播-它将接收它


    对于问题2:相同的答案:将您的服务注册到特殊广播代表您希望向该服务发送的消息。如果它没有运行(也没有注册到广播中),那么就不会有任何结果

    问题1和问题2的可能答案:

    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        for (RunningServiceInfo service : manager
                .getRunningServices(Integer.MAX_VALUE)) {
            if ("com.pkg.PlayerService".equals(service.service
                    .getClassName())) {
                isrunning = true;
                ;
            }
        }
        return isrunning;
    
    使用广播接收机:

    对于问题1:您可以将您的活动注册到您将定义的某种接收器,并在需要广播时发送给它。如果活动已注册到广播-它将接收它

    对于问题2:相同的答案:将您的服务注册到特殊广播代表您希望向该服务发送的消息。如果它没有运行(也没有注册到广播中),那么就不会有任何结果

    ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
        for (RunningServiceInfo service : manager
                .getRunningServices(Integer.MAX_VALUE)) {
            if ("com.pkg.PlayerService".equals(service.service
                    .getClassName())) {
                isrunning = true;
                ;
            }
        }
        return isrunning;
    
    运行此代码将为您提供服务状态。您可以在u r intentService的onDestroy()中创建一个日志,并检查您的服务何时停止


    运行此代码将为您提供服务状态。您可以在u r intentService的onDestroy()中登录,并检查您的服务何时停止。

    用于发送意图,它们将保留在应用程序范围内,然后在活动中使用广播接收器。

    用于发送意图,它们将保留在应用程序范围内,然后在活动中使用广播接收器。

    您是如何解决问题的?您是如何解决问题的?