如何在主Activity中始终启动应用程序?

时间:2011-11-24 15:44:19

标签: android android-activity startup

我有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(),但这似乎不是正确的方法。

知道如何解决这个问题吗?

6 个答案:

答案 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属性是不够的(我不是特别确定它是否正确)。

BC应在manifest文件中定义如下:

<activity android:name=".B"> 
</activity>
<activity android:name=".C"> 
</activity>

它们都不应与MAIN具有相同的LAUNCHERA属性,因为它们不是您要展示的第一个活动。