Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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中事件广播的SDK设计_Android_Android Service - Fatal编程技术网

Android中事件广播的SDK设计

Android中事件广播的SDK设计,android,android-service,Android,Android Service,我正在编写一个SDK,它在事件发生时广播一个动作 这些事件在后台服务中捕获 我有三个选择 全球广播一个意图 在当地广播一个意图 使用setComponent 首先 第一种方法的问题是,如果一部手机有两个或两个以上的带有SDK的应用程序,那么它将开始突然运行并引发问题。 因此,选项1被划掉了 秒 本地广播必须通过代码注册,即使用活动。 这种方法的问题是,如果应用程序被终止或未运行,我将无法接收事件 第三 我用setComponent做了一个小POC,但我无法接收广播事件。广播接收器在清单文件中注册

我正在编写一个SDK,它在事件发生时广播一个动作

这些事件在后台服务中捕获

我有三个选择

  • 全球广播一个意图
  • 在当地广播一个意图
  • 使用setComponent
  • 首先 第一种方法的问题是,如果一部手机有两个或两个以上的带有SDK的应用程序,那么它将开始突然运行并引发问题。 因此,选项1被划掉了

    本地广播必须通过代码注册,即使用活动。
    这种方法的问题是,如果应用程序被终止或未运行,我将无法接收事件

    第三 我用setComponent做了一个小POC,但我无法接收广播事件。广播接收器在清单文件中注册为已接收


    总之,我的要求是,我的事件将由后台服务生成,并且无论应用程序正在运行或暂停,我都应该能够在应用程序中接收这些事件。

    您拥有第四个,并且可能是最佳选择:使用

    发送消息(可以是任何POJO类实例)

    要接收消息,请执行以下操作:

    EventBus.getDefault().register(this);
    
    // This method will be called when a SomePojoClass instance is is posted
    @Subscribe
    public void onEvent(SomePojoClass event){
        Toast.makeText(getActivity(), event.getMessage(), Toast.LENGTH_SHORT).show();
    }
    

    就这么简单

    您拥有第四个,可能是最佳选择:使用

    发送消息(可以是任何POJO类实例)

    要接收消息,请执行以下操作:

    EventBus.getDefault().register(this);
    
    // This method will be called when a SomePojoClass instance is is posted
    @Subscribe
    public void onEvent(SomePojoClass event){
        Toast.makeText(getActivity(), event.getMessage(), Toast.LENGTH_SHORT).show();
    }
    

    就这么简单

    事件总线是否适用于API 11或之前的Android版本,即低于Android 2.3的版本?@VaibhavRanglani,我没有看到任何关于API级别的限制。通过链接或google自己仔细检查它。EventBus似乎不是来自Android SDK的类。你能指出它是图书馆的一部分吗。谢谢@VaibhavRanglani AFAIR事件总线不使用任何特定于Android的东西。这是一个纯Java实现。API 11上或之前的Android版本(即低于Android 2.3)是否可以使用事件总线?@VaibhavRanglani,我没有看到关于API级别的任何约束。通过链接或google自己仔细检查它。EventBus似乎不是来自Android SDK的类。你能指出它是图书馆的一部分吗。谢谢@VaibhavRanglani AFAIR事件总线不使用任何特定于Android的东西。这是一个纯Java实现。“这种方法的问题是,如果应用程序被终止或未运行,我将无法接收事件”--如果应用程序被终止或未运行,您的服务将被终止或未运行,因此没有事件。@commonware,如果终止应用或应用未运行,则可以运行服务。由于服务是应用的一部分,因此,如果包含服务的应用未运行,则服务未运行。当没有活动正在运行时,服务可能正在运行,但有活动!=应用程序。“这种方法的问题是,如果应用程序被终止或未运行,我将无法接收事件”--如果应用程序被终止或未运行,您的服务将被终止或未运行,因此没有事件。@commonware,如果终止应用或应用未运行,则可以运行服务。由于服务是应用的一部分,因此,如果包含服务的应用未运行,则服务未运行。当没有活动正在运行时,服务可能正在运行,但有活动!=应用程序。