单实例:启动器的启动模式 Activity
Single Instance : Launch Mode of Launcher Activity
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jatin.notification">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleInstance" > <!-- Activity A -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NotificationActivity"
>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".DialogActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:theme="@style/Theme.AppCompat.Dialog.MinWidth" />
<activity
android:name=".SecondActivity" /><!-- Activity B -->
</application>
</manifest>
根据单实例,系统不会在持有该实例的任务中启动任何其他活动。 activity 始终是其任务的唯一成员;此活动启动的任何活动都在单独的任务中打开。
但是,当我从 Activity A(Launcher Activity)-> Activity B 开始导航时 Activity(intent*) 而不是在新任务中Activity B 超越了 Activity A 的任务。
虽然当我通过 startActivity(intent*) 从 B 导航到 A 时,它显示了 A.
的单个实例
*未添加标志。
为什么 Activity B 被推到 Activity A 之上(因为 Activity 有启动模式:"singleInstance")而不是创建一个新任务?
活动列表:
任务记录{14ba4a25 #18 A=com.example.nischay.notification U=0 sz=2}
运行 #1: Activity记录{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18}
运行 #0: Activity记录{1ab16fa7 u0 com.example.nischay.notification/.MainActivity t18}
mResumedActivity: ActivityRecord{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18}
mLastPausedActivity: ActivityRecord{1ab16fa7 u0 com.example.nischay.notification/.MainActivity t18}
详情:
设备:联想k50a40
Android版本:5.0
CompileSdkVersion : 25
代码
Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE_NOTIFY);
宾果!最后解释一下这种奇怪的行为!
你说你从 MainActivity
开始 SecondActivity
是这样的:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE_NOTIFY);
使用 startActivityForResult()
时, 启动的 Activity
必须 运行 与 Activity
在同一任务 中期待结果(即:启动 Activity
)。因此,Android 将忽略 MainActivity
的 launchMode
并在同一任务中启动 SecondActivity
。
您创建了一个未记录的冲突。要解决您的问题,您需要决定您想要什么。您不能有调用 startActivityForResult()
的 singleInstance
Activity
。选择另一种机制在 SecondActivity
和 MainActivity
之间进行通信,或者删除 MainActivity
.
的特殊启动模式
你为什么要 MainActivity
成为 singleInstance
?这有什么原因吗?
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.jatin.notification">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:launchMode="singleInstance" > <!-- Activity A -->
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".NotificationActivity"
>
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
<activity
android:name=".DialogActivity"
android:excludeFromRecents="true"
android:noHistory="true"
android:theme="@style/Theme.AppCompat.Dialog.MinWidth" />
<activity
android:name=".SecondActivity" /><!-- Activity B -->
</application>
</manifest>
根据单实例,系统不会在持有该实例的任务中启动任何其他活动。 activity 始终是其任务的唯一成员;此活动启动的任何活动都在单独的任务中打开。
但是,当我从 Activity A(Launcher Activity)-> Activity B 开始导航时 Activity(intent*) 而不是在新任务中Activity B 超越了 Activity A 的任务。 虽然当我通过 startActivity(intent*) 从 B 导航到 A 时,它显示了 A.
的单个实例*未添加标志。
为什么 Activity B 被推到 Activity A 之上(因为 Activity 有启动模式:"singleInstance")而不是创建一个新任务?
活动列表:
任务记录{14ba4a25 #18 A=com.example.nischay.notification U=0 sz=2} 运行 #1: Activity记录{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18} 运行 #0: Activity记录{1ab16fa7 u0 com.example.nischay.notification/.MainActivity t18}
mResumedActivity: ActivityRecord{2a37b313 u0 com.example.nischay.notification/.SecondActivity t18}
mLastPausedActivity: ActivityRecord{1ab16fa7 u0 com.example.nischay.notification/.MainActivity t18}
详情:
设备:联想k50a40 Android版本:5.0 CompileSdkVersion : 25
代码
Intent intent = new Intent(MainActivity.this, SecondActivity.class); startActivityForResult(intent, REQUEST_CODE_NOTIFY);
宾果!最后解释一下这种奇怪的行为!
你说你从 MainActivity
开始 SecondActivity
是这样的:
Intent intent = new Intent(MainActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUEST_CODE_NOTIFY);
使用 startActivityForResult()
时, 启动的 Activity
必须 运行 与 Activity
在同一任务 中期待结果(即:启动 Activity
)。因此,Android 将忽略 MainActivity
的 launchMode
并在同一任务中启动 SecondActivity
。
您创建了一个未记录的冲突。要解决您的问题,您需要决定您想要什么。您不能有调用 startActivityForResult()
的 singleInstance
Activity
。选择另一种机制在 SecondActivity
和 MainActivity
之间进行通信,或者删除 MainActivity
.
你为什么要 MainActivity
成为 singleInstance
?这有什么原因吗?