【问题标题】:Running android apps particular activity independently than rest of activities独立于其他活动运行 android 应用程序特定活动
【发布时间】:2020-02-22 06:45:25
【问题描述】:

这个问题已经解决,为下面的访问者提供答案

上下文:

我正在开发一个默认的电话应用程序。它处理来自我的应用程序的action.DIALaction.CALL,它也处理来自其他应用程序的这两个意图。

什么问题:

如果我的CallActivity 正在运行(如果有任何通话正在进行),那么 -

  1. 当我再次尝试打开我的应用时,它只显示CallActivity
  2. 因此,我无法通过打开我的应用来拨打另一个电话。

ma​​nifest.xml 的样子:

<application
    android:allowBackup="true"
    android:directBootAware="true"
    android:fullBackupContent="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

    <activity
        android:name=".MainActivity"
        android:label="@string/app_name"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter>
            <action android:name="android.intent.action.CALL_BUTTON" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>

    <activity
        android:name=".CallActivity"
        android:label="@string/title_activity_call"
        android:process=":CallManager"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar">
        <intent-filter android:priority="800">
            <action android:name="android.intent.action.ACTION_CALL" />

            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
        </intent-filter>
    </activity>
</application> 

我在搜索上述问题时发现了什么:

我做了哪些努力:

你可以注意到我在manifest 中为我的CallActivity 尝试了android:process=":CallManager" 属性

是否解决了问题:

不。每当CallActivity 运行时,我仍然无法打开我的MainActivity。但是导致现在我的通话没有结束的问题,因为这完全是另一个进程,它无法引用旧进程中仍然存在的其他调用。

回答

android:process 是否正确:

在这种情况下一点也不用,因为它在我们的应用程序内存使用量增加超过特定限制时使用 android 开始缓存其服务和资源以避免它开发人员通常使用android:process 这允许他们使用另一个可用的堆内存相同的堆大小。

** 什么问题:**

它与任务及其相关性有关 两种活动都需要根据任务及其相关性分开

喜欢:

<activity
android:name="com.example.ActivityA"
android:label="Activity A"
android:launchMode="singleInstance"
android:taskAffinity="com.example.AffinityA" >
</activity>
<activity
android:name="com.example.ActivityB"
android:label="Activity B"
android:launchMode="singleInstance"
android:taskAffinity="com.example.AffinityB" >
</activity>

我必须感谢 @JayWozz 对 SO https://stackoverflow.com/a/45488126/9810130 的回答,并且必须感谢 @gabe-sechan 的真诚帮助和努力,以及为这个线程付出宝贵的时间。

【问题讨论】:

  • 过程的东西绝对不是你想要的。这会在一个新流程中运行您的活动(我实际上并不知道它可以与活动一起使用,它通常与服务一起使用),这基本上意味着它开始一个没有链接的应用程序的新副本(包括您编写的任何变量)到上一个。

标签: android process


【解决方案1】:

我认为您基本上是在要求一组新的活动。尝试使用FLAG_ACTIVITY_NEW_DOCUMENT| FLAG_ACTIVITY_MULTIPLE_TASKS 启动意图,这将启动该活动,就好像它是一组新活动一样,并在最近的应用程序列表中单独列出。在https://developer.android.com/reference/android/content/Intent

上查看这些标志的定义

【讨论】:

  • 如何使用FLAG_ACTIVITY_NEW_DOCUMENT| FLAG_ACTIVITY_MULTIPLE_TASKS 当用户触摸应用图标启动它?
  • 检查编辑 2. 我认为我的清单中需要一个属性而不是 FLAGS
  • 您的通话活动不是您的启动器活动。所以当用户触摸应用程序图标时它不会启动,mainactivity 会。
  • @Gebe,检查我编辑的清单代码,我的两个活动都是 category.DEFAULT,所以它正在启动它,作为一个手机应用程序,我的应用程序需要这两个活动是 category.DEFAULT
  • 我的通话活动不是我的启动器活动,但它已经在通话进行时启动。现在我想打开我的应用程序,所以当我打开我的应用程序时,我看到的是我的通话活动,而不是我的活动,我想查看我的主要活动
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多