代码之家  ›  专栏  ›  技术社区  ›  92AlanC

我怎么能只运行同一个应用程序的一个进程?

  •  0
  • 92AlanC  · 技术社区  · 6 年前

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

    更具体地说,让我们调用活动Z及其父级,如清单中所声明的Y。如果我从活动X启动活动Z并按下向上操作栏按钮,活动Y将启动,然后我将运行两个进程:一个进程运行活动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 回复  |  直到 6 年前
        1
  •  0
  •   92AlanC    6 年前

    meta-data 标记该活动,然后手动执行向上按钮行为,如以下示例所示:

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