Android 一个应用程序和两个独立的活动
我正在开发只包含两个活动的简单应用程序Android 一个应用程序和两个独立的活动,android,android-intent,android-activity,Android,Android Intent,Android Activity,我正在开发只包含两个活动的简单应用程序 活动C配置应用程序 当某些事件发生时与用户交互的活动 用户不可能从一个活动导航到另一个活动-这就是为什么我称它们为独立活动。此外,更多的活动A仅在表单事件中调用,用户无法手动执行 问题。让我们假设应用程序已正确配置。系统中发生了一些事件,因此正在向用户显示应用程序A。用户与之交互,活动进入后台。然后用户决定启动配置活动C。活动C显示给用户。用户使用“后退”按钮“关闭”活动,但用户看到的不是android launcher或桌面,而是活动A(取自历史记录
- 活动C配置应用程序
- 当某些事件发生时与用户交互的活动
<activity
android:name=".C"
android:clearTaskOnLaunch="true"
android:excludeFromRecents="false"
android:launchMode="singleTask"
...
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:exported="false"
android:name=".A"
android:excludeFromRecents="true"
android:noHistory="true"
android:launchMode="singleInstance"
android:clearTaskOnLaunch="true"
....
>
</activity>
从事件处理程序中剪切:
public class H extends BroadcastReceiver {
...
Intent intent = new Intent(p_context, A.class);
intent.addFlags(Intent.FLAG_FROM_BACKGROUND);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_USER_ACTION);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
p_context.startActivity(intent);
...
}
它适用于我的应用程序。但是,我希望应用程序(活动C)出现在最近的应用程序中。但一旦调用了活动,应用程序就会从最近的中删除。我不知道这是否是最干净的方法,但您可以重写
void onBackPressed()
活动方法。通过这种方式,您可以手动将活动移动到后台,如下所示,并防止前一个活动突然出现:
public void onBackPressed () {
moveTaskToBack (true);
}
编辑:发现有一种更好的方法:
打开您的
AndroidManifest.xml
,在每个声明中放入以下内容:`android:noHistory=“true”``。这样做会告诉Android您的活动不会留下历史记录,因此,当用户回击时,Android将退出应用程序,因为没有其他活动可供其返回。所以您希望的是您以前的活动finish()代码>在移动到另一个活动时编辑?您不需要完成当前活动,您只能按照我的建议将其移动到后台。另外,请注意,将电源按钮包括在开关案例列表中会产生一个新问题:当用户锁定屏幕时,应用程序将关闭。我不知道这是否是建议性的,但默认的Android行为表明这是错误的。活动A应该只在某些事件发生时使用。当用户决定锁定屏幕时,与活动A交互的原因无效。目前C中没有与应用程序状态相关的代码,因此我根本不显示它。noHistory不是活动C的选项。它调用其他活动从通讯簿中选择联系人。因此,它必须保留在历史堆栈中,以便android知道在哪里交付结果。然后实现这一点的最简单方法是实现我的第一个解决方案。实际上,两者都是相同的,但第二种方法需要更少的代码,并且侵入性更小。另一方面,第一个更具可定制性。当我现在使用代码时,我开始相信您的firs解决方案确实是实现我想要的最干净的方法。我可能会使用太多不必要的android:。。。属性或调用活动A时标记太多。因此,任何其他建议都很好。谢谢你的帮助。
public void onBackPressed () {
moveTaskToBack (true);
}