如何仅运行同一应用程序的一个进程?

时间:2018-10-01 12:33:01

标签: android android-activity android-manifest android-task

我正在开发的Android应用程序存在问题,当我在一个特定活动中按下“向上”操作栏按钮时,该系统使系统运行同一应用程序的2个进程。

更具体地说,让我们将活动Z及其父级(如清单Y中所声明)称为。如果我从活动X启动活动Z并按向上操作栏按钮,则活动Y将被启动,那么我将运行2个进程:一个进程的活动为Y,另一个进程的活动为Z。

我已经尝试为该活动设置不同的启动标志,但是问题仍然存在。

有问题的活动与应用程序中的其他5个活动具有相同的任务相似性,但这是唯一导致此行为的活动。

这是清单的一小段,其活动与导致问题的活动具有相同的亲和力,并提供了截图以证明该应用程序有两个进程正在运行。

清单

        <activity android:name=".feature.stations.X"
            android:taskAffinity="@string/affinity_petrol_stations"
            android:theme="@style/AppTheme.NoActionBar"/>

        <activity android:name=".feature.stations.Y"
            android:taskAffinity="@string/affinity_petrol_stations"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data android:name="android.support.PARENT_ACTIVITY"
                android:value=".feature.stations.X"/>
        </activity>

        <!-- THIS IS THE ACTIVITY THAT CAUSES THE ISSUE -->
        <activity android:name=".feature.stations.Z"
            android:taskAffinity="@string/affinity_petrol_stations"
            android:theme="@style/AppTheme.NoActionBar">
            <meta-data android:name="android.support.PARENT_ACTIVITY"
                android:value=".feature.stations.Y"/>
        </activity>

屏幕截图 2 processes running

顶部的过程显示活动Z,底部的过程显示Y。

1 个答案:

答案 0 :(得分:0)

我设法通过从该活动中删除meta-data标签来解决问题,然后手动实现向上按钮行为,如下例所示:

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
    when (item?.itemId) {
        ...
        android.R.id.home -> finish()
    }
    return super.onOptionsItemSelected(item)
}