我的应用程序中有这种情况:我有这些活动
<activity
android:name=".presentation.view.start.view.activity.StartActivity"
android:screenOrientation="sensorPortrait"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".presentation.view.main.view.activity.MainActivity"
android:configChanges="locale"
android:screenOrientation="sensorPortrait"
android:theme="@style/AppThemeMultiStep"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".presentation.view.firstScreen.view.activity.FirstScreenActivity"
android:screenOrientation="sensorPortrait"
android:theme="@style/AppThemeMultiStep"
android:windowSoftInputMode="stateAlwaysHidden" />
<activity
android:name=".presentation.view.signup.view.activity.LoginViaPinActivity"
android:screenOrientation="sensorPortrait"
android:theme="@style/AppThemeMultiStep" />
StartActivity基于应用程序状态充当一种“路由器”:
在某些时候,应用会收到通知,当我点按它时,我想要这个:
如果应用程序正在运行并且MainActivity正在运行,请打开MainActivity(这很简单,我可以通过各种标志实现这种方式)但是如果它没有运行启动StartActivity(这样我就可以打开应用程序了所有在那里实现的启动逻辑。)
所以我能想到的选择是:
知道某个活动是否正在运行以激发意图或其他活动(我不喜欢像您在许多与此相关的SO帖子中读取的静态字段解决方案)
使StartActivity成为任务的根,并找到一个意图标志组合,它们的行为类似于“启动StartActivity,但如果它在任务的根目录下运行,则将该任务置于最前面”(这将是如果可能,我的首选方案)
任何建议都非常感谢
你通常如何处理这种情况? (我不认为我是世界上第一个遇到这个问题的人:))
答案 0 :(得分:0)
这是我的方法 -
如您所说,将StartActivity
设为您的路由器。只需将清单中的启动模式设为singleTop
,即可使用onNewIntent()
的{{1}}方法。
您将生成通知,并使用Activity
发送一些数据 - 因此点击通知您将被重定向到contentIntent
。
这里有两个案例 -
如果StartActivity
在堆叠中
用你的新意图调用StartActivity
- 选择你需要打开的活动 -
如果它已经在堆栈中使用onNewIntent
标志
如果FLAG_ACTIVITY_REORDER_TO_FRONT
未在堆栈中运行
通过通知接收通过意图获得的StartActivity
bundle
,解析数据并相应地打开活动。