【发布时间】:2015-10-18 18:27:17
【问题描述】:
我遇到了一个非常奇怪的问题,它只出现在发布版本中。
我的应用程序实现了一个启动屏幕,它会在 1 秒延迟后自行清除并启动主要活动。初始屏幕在我的清单中使用 MAIN / LAUNCHER 意图过滤器声明。
调试应用程序时,一切正常(顺便说一下,我使用的是 Android Studio 1.3)。
但是,当我在发布版中启动应用程序时会发生以下情况:
- 启动应用,出现启动画面
- 1 秒后,闪屏结束并打开主 Activity - 到目前为止,一切顺利。
- 我点击主页按钮,应用程序进入后台
- 回调应用 - 启动画面已打开
- 1 秒后,闪屏被移除,主 Activity 以原始状态打开。
如果我杀死该应用程序并再次打开它,此错误会消失,并且在我重新安装该应用程序之前不会再次出现。
我查看了this 的帖子并在那里实施了解决方法,它似乎解决了问题,但我仍然非常担心这个错误,并且想知道最近是否有其他人看到类似的事情发生(帖子很旧,并且表明该问题可能与日食有关)。
编辑
这是我添加到初始屏幕活动的代码(来自上面链接的帖子):
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
if ((getIntent().getFlags() & Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT) != 0)
{
// call code which launches the main activity here
finish();
return;
}
正如我所说,这个添加的代码消除了这个问题,但我试图理解为什么这个问题首先出现?为什么这只发生在发布版本中,为什么它只在第一次安装应用程序时发生,并且在应用程序被终止并重新启动后停止发生?
新活动打开时带有以下意图标志:FLAG_ACTIVITY_SINGLE_TOP & FLAG_ACTIVITY_CLEAR_TOP
这是我的清单的相关部分:
<activity
android:name="com.my.app.SplashScreenController"
android:label="@string/app_name"
android:screenOrientation="portrait"
android:theme="@style/LightTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
发布打开下一个活动的确切代码有点困难,因为我的应用程序逻辑有些复杂,并且打开的下一个活动很大程度上取决于变体和内部应用程序状态。
【问题讨论】:
-
您能粘贴您的启动画面和清单代码吗?另外我想问一件事,你在从闪屏启动意图之前调用了finish()吗?
-
我在启动下一个活动后立即在初始屏幕上调用finish()。