Android应用程序启动是否可以启动没有意图过滤器的活动?

Android应用程序启动是否可以启动没有意图过滤器的活动?,android,android-activity,intentfilter,android-launcher,Android,Android Activity,Intentfilter,Android Launcher,在我的Android应用程序中,我有很多“内部”活动,我只想通过我编写的代码从应用程序内部开始。这些“内部”活动在Android清单文件中没有意向过滤器标记。我有一个名为SplashActivity的活动,我将其用作具有典型启动意图过滤器的启动屏幕: <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.

在我的Android应用程序中,我有很多“内部”活动,我只想通过我编写的代码从应用程序内部开始。这些“内部”活动在Android清单文件中没有意向过滤器标记。我有一个名为SplashActivity的活动,我将其用作具有典型启动意图过滤器的启动屏幕:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

我希望/期待着,每当Android启动我的应用程序并创建我的自定义应用程序对象时,它总是会启动我的Splash活动。但是,我的一些用户在启动时遇到了我的一个没有意图过滤器的“内部”活动。我相信活动通常是在应用程序的前一次调用中使用的最后一个活动。我自己还无法复制这个问题。然而,在某些情况下,Android将启动我的应用程序,创建我的自定义应用程序对象,但启动我的一个没有意图过滤器的内部活动。在什么情况下Android会这么做


要轻松重现Android application launch启动一个没有意图过滤器的活动的场景,请首先打开应用程序以进行任何此类活动。按主页按钮。然后使用Android设备监视器(DDMS)查找正在运行应用程序的进程并停止/终止该进程。然后启动你的应用程序。Android将创建您的应用程序对象,但将启动/恢复上次显示的活动,而不是使用主启动器意图过滤器启动活动。

当应用程序仍处于“活动”状态时,会发生这种情况

当您退出应用程序时,Android不会杀死它。它将保留在那里,直到需要内存为止。
在这种情况下,当用户重新启动它时,他将获得最后一个活动。

当应用程序仍处于“活动”状态时,会发生这种情况

当您退出应用程序时,Android不会杀死它。它将保留在那里,直到需要内存为止。 在这种情况下,当用户重新启动它时,他将获得最后一个活动。

您可以尝试添加吗

android:clearTaskOnLaunch
用于清单文件中的根活动。

是否可以尝试添加

android:clearTaskOnLaunch

用于清单文件中的根活动。

Android可以随时终止承载应用程序的操作系统进程。通常,当你的应用程序已经在后台运行了一段时间(即:用户离开你的应用程序去做其他事情)时,就会发生这种情况。这种情况经常发生

当用户返回到您的应用程序时,Android会为该应用程序创建一个新的操作系统进程,并创建一个位于堆栈顶部的
活动的新实例(即:在将应用程序推到后台之前屏幕上显示的
活动

如果不希望发生这种情况,可以将以下属性添加到
SplashActivity
声明中:

android:clearTaskOnLaunch="true"
这将迫使Android在用户返回应用程序时始终从一开始就重新启动应用程序。然而,这可能会让你的用户抱怨,因为如果用户正在使用你的应用程序,然后接听电话,然后返回到你的应用程序,它将从头开始

如果您自己检测到问题,并仅在必要时重定向到
SplashActivity
(即:当您的应用程序由于进程已终止并重新启动而需要初始化时),效果会更好。为此,请在
SplashActivity
中声明一个名为
initialized
static
变量,当
SplashActivity
成功初始化应用程序时,将该变量设置为
true
。在其他每一个
活动中
,请在
onCreate()中执行此操作:


Android可以随时关闭你的应用程序所在的操作系统进程。通常,当你的应用程序已经在后台运行了一段时间(即:用户离开你的应用程序去做其他事情)时,就会发生这种情况。这种情况经常发生

当用户返回到您的应用程序时,Android会为该应用程序创建一个新的操作系统进程,并创建一个位于堆栈顶部的
活动的新实例(即:在将应用程序推到后台之前屏幕上显示的
活动

如果不希望发生这种情况,可以将以下属性添加到
SplashActivity
声明中:

android:clearTaskOnLaunch="true"
这将迫使Android在用户返回应用程序时始终从一开始就重新启动应用程序。然而,这可能会让你的用户抱怨,因为如果用户正在使用你的应用程序,然后接听电话,然后返回到你的应用程序,它将从头开始

如果您自己检测到问题,并仅在必要时重定向到
SplashActivity
(即:当您的应用程序由于进程已终止并重新启动而需要初始化时),效果会更好。为此,请在
SplashActivity
中声明一个名为
initialized
static
变量,当
SplashActivity
成功初始化应用程序时,将该变量设置为
true
。在其他每一个
活动中
,请在
onCreate()中执行此操作:


我想重复一下这个问题。如何“退出”应用程序,但将其保持在此状态?备份/备份在我的应用程序中完成(),但当我再次启动应用程序时,我会看到我的活动。很明显,我的一些用户不这样做,我正试图弄清楚如何将我的应用程序置于这种状态,以便我可以测试并确保我的应用程序在这种情况下工作。我在家里试用了最近使用的应用程序。我只是不知道如何将我的应用程序置于这种状态。我如何将应用程序置于这种状态以进行测试和开发?据我所知,我的自定义应用程序对象(其中包含一些必要的状态)正在被销毁并再次创建。Android会重新创建我的自定义应用程序对象,但不会启动我的启动活动吗?也许这就是安卓的方式