【发布时间】:2020-02-22 06:45:25
【问题描述】:
这个问题已经解决,为下面的访问者提供答案
上下文:
我正在开发一个默认的电话应用程序。它处理来自我的应用程序的action.DIAL 和action.CALL,它也处理来自其他应用程序的这两个意图。
什么问题:
如果我的CallActivity 正在运行(如果有任何通话正在进行),那么 -
- 当我再次尝试打开我的应用时,它只显示
CallActivity。 - 因此,我无法通过打开我的应用来拨打另一个电话。
manifest.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 的真诚帮助和努力,以及为这个线程付出宝贵的时间。
【问题讨论】:
-
过程的东西绝对不是你想要的。这会在一个新流程中运行您的活动(我实际上并不知道它可以与活动一起使用,它通常与服务一起使用),这基本上意味着它开始一个没有链接的应用程序的新副本(包括您编写的任何变量)到上一个。