0

在正确处理活动之间的流程方面,我正在寻求建议。假设我有两个活动 - LoginActivity 和 MainActivity:

<activity
android:name=".LoginActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait">
<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:name=".MainActivity"
android:configChanges="keyboardHidden|orientation"
android:label="@string/app_name"
android:launchMode="singleTop"
android:screenOrientation="portrait" />

现在,当应用程序启动时,我启动 LoginActivity,如果登录成功,我将显示 MainActivity。

现在,当我想处理某些类型的意图时,问题就开始了。假设我想向我的应用程序添加自定义架构:

<intent-filter>
    <data android:scheme="customschema" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.BROWSABLE" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

我会将这个添加到哪个活动中?理想情况下,我希望将它添加到 MainActivity,然后在 onNewIntent 方法中处理它,但我的应用程序可能没有启动,在这种情况下,我首先需要运行 LoginActivity。另一方面,如果我将其添加到 LoginActivity,一旦用户成功登录,我需要一种方法将该意图传递给 MainActivity。或者如果应用程序已经启动,我需要将焦点从 LoginActivity 切换到 MainActivity 并立即传递意图数据。

我相信这个问题之前一定已经解决了,我宁愿遵循最佳实践,也不愿尝试发明自己的解决方案——这就是我寻求建议的原因。

4

2 回答 2

1

必须永远不会有一个以上的LoginActivity实例

一旦您收到“主要活动”的意图,请确保在 onCreate 方法中检查登录,如果用户未登录,则将意图返回给 LoginActivity。

如果用户已到达 LoginActivity,但已经登录,则将意图返回到主要活动。

这可能会导致 UI 出现故障,但这仅表示设计错误,因为任何类型的事件都不应该到达未登录的应用程序!

于 2013-03-25T23:52:23.940 回答
1

忘记我最初说的,我在想广播接收器。

改用 Commonsware 的这个解决方案:

如何通过可编程方式创建/禁用意图过滤器?

于 2013-03-25T23:36:27.983 回答