【问题标题】:Keeping Widget Applications Main Activity in BACKGROUND将小部件应用程序的主要活动保持在后台
【发布时间】:2011-02-17 21:00:00
【问题描述】:

我的小部件部署在一个应用程序中,该应用程序也启动一个主要活动。大多数时候,我希望这个主要活动在后台运行,但是当我单击小部件时,它会转到 FOREGROUND,而不是用户看到小部件会更改应用程序主要活动的显示。我无法摆脱主要活动,因为我还希望允许用户启动包含小部件的应用程序。想知道如何处理这种情况。谢谢。

【问题讨论】:

    标签: android android-activity widget launch


    【解决方案1】:

    设置android:launchMode="singleInstance" 似乎可以防止主要活动进入前台。但是不确定这是否有一些缺点。

    【讨论】:

      【解决方案2】:

      Android 中的后台进程应实现为Services。活动旨在存在于前台,并且在处于非活动状态时会自行暂停。

      【讨论】:

      • true,我确实为所有后台进程提供服务。但是小部件是在具有 Activity、A Service 和 WidgetProvider 的应用程序的清单中声明的​​。小部件是大型应用程序的一部分,用户也可以从应用程序列表中启动它
      • 几乎所有东西都在服务中,但我认为小部件的想法是与显示应用程序状态的应用程序交互的东西。大多数应用程序都有活动。这不是非此即彼的情况,我想要一个带有活动的应用程序,并且我想要一个与它交互的家庭小部件。但我不希望我在小部件中执行的任何操作导致显示主要活动,除非我特别从服务中请求它
      • 我的意思是,我没有在任何地方对主要活动进行 startActivity。
      • 我愿意更改我的小部件提供程序架构,但我需要与包含主要活动在内的活动的应用程序进行交互。现在,小部件提供程序是在具有主要活动的应用程序的清单中声明的​​。
      • 我只是不想点击小部件导致 android 将活动带到前台,这就是它现在正在做的事情。
      【解决方案3】:

      单击它来到 FOREGROUND 的小部件,而不是用户看到小部件更改应用程序主活动显示。

      您是设置PendingIntent 以在单击应用小部件中的某些内容时将该活动置于前台的人。修复你的PendingIntent,你的问题就会消失。

      Here is a sample application 使用PendingIntents 更新应用小部件而不将任何活动带到前台——事实上,应用没有活动。

      【讨论】:

      • 下面是我在 Manifest 中设置 Pending Intent 和 Main Activity 文件过滤器的方式。
      • 小部件挂起意图:意图 buttonIntent = new Intent(context, TheWidgetProvider.class); buttonuttonIntent.setAction(ACTION_BUTTON_CLICKED); PendingIntent buttonPendingIntent = PendingIntent.getBroadcast(context, 0, buttonIntent, PendingIntent.FLAG_UPDATE_CURRENT); MainActivity.java 意图过滤器:
      • No Activity 对我来说不是一个选项,因为应用程序的其他部分需要一个 Activity。当 Main Activity 进入后台时,问题就消失了,并通过在 Activity 上不设置历史记录来部分解决。
      • 我还搜索了我的整个工作区,但我没有在任何地方执行 startActivity(intent) 并将 ACTION 设置为 android.intent.action.MAIN
      • @Androider: TheWidgetProvider 是一个AppWidgetProvider,在清单中注册了吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 2016-12-18
      • 1970-01-01
      相关资源
      最近更新 更多