【问题标题】:How to start android activity without showing main activity in the back如何启动android活动而不在后面显示主要活动
【发布时间】:2013-02-18 15:33:00
【问题描述】:

我正在开发一个包含 2 个活动的应用程序:

  1. 主要活动在用户启动应用程序时启动。

  2. 在用户单击按钮小部件时启动第二个活动 在主屏幕上。

我创建了我的小部件以及当用户单击小部件按钮时将显示的视图。

我的问题:第二个activity UI显示在主activity上方,主activity可见是因为第二个activity布局是透明的,因为我想让主屏幕在点击时仍然可见在小部件中。

我怎样才能只启动第二个活动而不启动它下面的主要活动?我试图从清单文件中删除主要活动中的<action android:name="android.intent.action.MAIN" />,小部件可以工作,但是当我在手机中安装我的应用程序时,没有安装应用程序图标,因此我无法启动主要活动。

我希望我已经表达了我的问题。

【问题讨论】:

  • 您是否尝试在启动新活动后对第一个活动调用finish()?
  • 如果你不知道答案,请不要拒绝投票任何问题..

标签: android android-activity stack


【解决方案1】:

您必须在开始第二个Activity 后立即完成第一个Activity

startActivity(<secondActivity>);
finish();

【讨论】:

  • 谢谢,但我不能这样做,因为我从小部件而不是主要活动中启动第二个活动,所以我无法访问主要活动对象来完成它..任何知道我该怎么做?
【解决方案2】:

您可以在开始第二个活动后完成主要活动:

startActivity(secondActivity.class);
finish();

或者在您的应用程序清单中,您可以在您的主要活动上使用 noHistory 标志,因此当您离开它时它会自行调用完成。

android:noHistory="true"

【讨论】:

  • 谢谢,我正在寻找这个,我还发现我可以通过将 android:launchMode="singleTask" 添加到我的活动属性来做到这一点,这是更好的解决方案吗?如果我使用 android:noHistory="true" 那么 android 将永远不会存储应用程序内存缓存数据,因此它可以使应用程序每次加载时间更长?
  • noHistory 只会做到这一点,因此每当 mainActivity 启动时,当您退出它(通过关闭它或转到新活动)时,它就会完成。我不确定这是否会对您的缓存产生负面影响,您必须对其进行调查。 singleTask 将完成堆栈中的其他活动,因此它可能具有相同的效果。
【解决方案3】:

也许与第二个活动相关联的不同意图操作和意图过滤器将起作用。看看documentation。记事本应用示例应该和想要做的差不多。

【讨论】:

  • 我已经为这 2 个活动设置了不同的意图操作和过滤器。
  • 然后你可以直接使用它的意图过滤器调用第二个活动。您可以通过使用Intent.setData() 方法调用来传递您的第二个活动可以处理的uri来做到这一点。这里有一些 documentation 可能会对您有所帮助。
【解决方案4】:

我这样解决了我的问题:

1- 我在清单文件中添加了主要活动属性:

android:launchMode="singleTask"

我测试了它不会使重新启动活动时的加载时间比通常更长,因为此属性不会擦除应用缓存并将意图实例保留在内存中。

2- 将此添加到主要活动类:

@Override
void onPause()
    {
    super.onPause();
    finish();
    }

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多