如何在不显示后台主活动的情况下启动Android活动

3
我正在开发一个包含两个活动的应用程序:
  1. 启动主活动,用户从中启动应用程序。
  2. 点击主屏幕上的按钮小部件后启动第二个活动。
我创建了我的小部件和视图,当用户点击小部件按钮时将显示该视图。 我的问题:第二个活动UI显示在主活动上方,因为第二个活动布局是透明的,所以主活动可见,因为我希望在单击小部件时仍然可以看到主屏幕。
如何只启动第二个活动而不启动它下面的主活动?我尝试从清单文件中删除主活动中的<action android:name="android.intent.action.MAIN" />,小部件可以正常工作,但是当我在手机上安装我的应用程序时,没有应用程序图标安装,因此我无法启动主活动。
希望我已经表达清楚我的问题。

1
你尝试过在启动新的活动后,在第一个活动上调用finish()方法吗? - undefined
如果您不了解答案,请不要对任何问题进行负面评价。 - undefined
4个回答

1
你需要在启动第二个Activity后立即完成第一个Activity
startActivity(<secondActivity>);
finish();

谢谢,但我不能这样做,因为我是从小部件而不是主活动启动第二个活动,所以无法访问主活动对象来完成它。有什么办法可以解决这个问题吗? - undefined

1
你可以在启动第二个活动后结束主活动。
startActivity(secondActivity.class);
finish();

或者在您的应用程序清单中,您可以在主活动上使用noHistory标志,这样当您从它导航离开时,它会自动调用finish方法。
android:noHistory="true"

谢谢,我正在寻找这个信息,我还发现可以通过将 android:launchMode="singleTask" 添加到我的活动属性中来实现这一点,哪种解决方案更好?如果我使用 android:noHistory="true",那么 Android 将不会存储应用程序的内存缓存数据,这可能导致每次加载应用程序的时间更长吗? - undefined
noHistory将使得每次启动mainActivity时,无论是关闭它还是跳转到其他活动,都会使其结束。关于对缓存是否有负面影响,我不确定,你需要进行进一步了解。singleTask将结束栈中的其他活动,所以可能会产生相同的效果。 - undefined

0
也许为第二个活动关联不同的意图操作和意图过滤器会起作用。请查看文档。记事本应用程序示例应该类似于我们需要做的事情。

我已经为这两个活动准备了不同的意图操作和过滤器。 - undefined
然后,您可以通过使用其意图过滤器直接调用第二个活动。您可以通过使用Intent.setData()方法调用来传递第二个活动可以处理的URI来实现这一点。这里有一些可能对您有帮助的文档 - undefined

0
我解决了我的问题,方法如下:
1- 我在清单文件的主活动中添加了属性:
android:launchMode="singleTask"

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

2- 将以下内容添加到主活动类中:

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

感谢大家的帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接