我有3个活动A,B和C. A做的是,它根据Preference值(用户可以根据自己的喜好切换)将用户重定向到活动B或C. 现在,我的问题是,为此工作,然后活动A需要是每次用户打开我的应用程序时运行的第一个活动,否则不进行选择。
因此,如果用户处于活动B并按下主页按钮,然后打开我的应用程序,我希望应用程序运行活动A,而不是通常发生的B。
我已经在清单文件中尝试在活动A中设置android:clearTaskOnLaunch =“true”,但这没有帮助。它仍然只是直接跳到活动B.
我还读到可能在活动B和C中调用onStop()中的finish()可能是一个解决方案,但这很糟糕,因为输入Preferences活动(通过活动B和C中的OptionsMenu)将调用OnStop()关于活动,从而关闭活动,所以当我想从首选项活动返回时(通过按回)我的应用程序关闭(因为无处可回复)。
我当然可以制作一个布尔值并尝试检查我是否要进入Preference活动,并且当我不去那里时只调用finish(),但这似乎不是正确的方法。
知道如何解决这个问题吗?
答案 0 :(得分:3)
活动B和C上的android:launchMode="singleInstance"
可能会完成吗?
答案 1 :(得分:3)
在您希望仅打开一次的活动中的清单文件中使用此android:launchMode =“singleInstance”。如果您打开该活动,然后按主页按钮,然后再次打开您的应用程序,它将不会恢复您之前打开的活动。它打开父活动。真的,它在我建立广播接收器应用程序时对我们有用。试试吧
答案 2 :(得分:0)
将此代码放在活动B的onPause方法(覆盖它)
finish();
答案 3 :(得分:0)
按主页键时,是否要完成活动?尝试在B和C活动中添加此代码:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if(keyCode == KeyEvent.KEYCODE_HOME)
{
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}
编辑:您也可以尝试在onResume方法中完成()您的活动。在这里,你可以完成B或C,然后开始A ...
答案 4 :(得分:0)
Bind&解除对B,C和Preference活动'onStart&的服务的绑定的onStop。
在B&amp ;;中注册并取消注册BroadcastReceiever C's onStart&的onStop。
在服务的onDestroy中,广播B& S的自定义广播意图。 C已注册。收到此广播后,请完成活动。
虽然B,C或偏好活动在屏幕上,但服务是绑定。当这些都不在屏幕上时(用户按下主页按钮或(重要的是)他们从通知栏打开另一个应用程序),该服务被解除绑定并被销毁 - 触发广播消息,该消息将完成任何B& B的实例。 C在后面的堆栈中。
由于B的onStart在Preference的onStop之前被调用(如果从Preference屏幕回来),该服务仍然存在且没有任何结束。
答案 5 :(得分:0)
在manifest
文件中,您应该像这样设置主要活动:
<activity android:name=".A">
<intent-filter >
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
启动应用程序时,应始终打开A
。仅仅设置clearTaskOnLaunch
属性是不够的(我不是特别确定它是否正确)。
B
和C
应在manifest
文件中定义如下:
<activity android:name=".B">
</activity>
<activity android:name=".C">
</activity>
它们都不应与MAIN
具有相同的LAUNCHER
和A
属性,因为它们不是您要展示的第一个活动。