【问题标题】:android : how does the OS chose a component implementation when multiple implementation respond to the same intent?android:当多个实现响应同一个意图时,操作系统如何选择组件实现?
【发布时间】:2010-12-19 00:57:54
【问题描述】:

我有同一个应用程序的免费和高级版本(几乎相同的代码,相同的类,到处都有“if”,清单中的不同包,清单中的相同进程名称)。主要活动调用一个服务来执行一些东西,使用隐式意图。

当我在手机上安装这两个应用程序时,事实证明,高级活动实际上有时会启动“免费”服务,而有时会启动“高级”服务。 我一直在玩类别和包管理器,但它似乎太复杂了。

问题:

  1. Android 如何处理响应同一个 Intent 的多个组件?
  2. 您将如何做我想做的事情:我在多个应用中拥有相同的服务,但我只想从所有应用中调用一个实例?

【问题讨论】:

    标签: android android-intent intentfilter


    【解决方案1】:

    我猜你可以在意图中添加一个额外的布尔值 isPremium。当然,您将需要更多这些“如果”。

    活动:

    //send broadcast
    Intent serviceStarted = new Intent(Actions.ACTION_START_SERVICE);
    serviceStarted.putExtra(Extras.EXTRA_PREMIUM_VERSION, PREMIUM_VERSION);
    sendBroadcast(serviceStarted);
    

    接收者:

    if (!intent.getExtras().getBoolean(Extras.EXTRA_PREMIUM_VERSION)) {
        Log.v(TAG, " - ignoring wrong version");
        return;
    }
    

    【讨论】:

    • 我相信 Android 只会将该意图转发给单个接收器,因此如果它不是正确的接收器,那么另一个接收器将永远不会收到它。我注意到如果多个活动响应相同的意图,则会显示一个弹出窗口,但我想知道服务。
    • 我取决于您如何称呼它 - startActivity 和 startService 针对单个 Activity/Service 并可能触发弹出窗口以选择要启动的内容。但是使用 sendBroadcast 将触发所有接收者,因为接收者会传递它。
    猜你喜欢
    • 2016-03-18
    • 2019-08-30
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2018-08-13
    • 2014-01-24
    • 2021-04-06
    • 1970-01-01
    相关资源
    最近更新 更多