在我的应用程序中,我使用品牌启动主题(解释为in this Google+ post的技术)来显示从主屏幕启动的活动。
问题是当用户从该活动导航到另一个活动并且第一个活动在后台被杀死时(例如当你打开Don’t keep activities
时)。在这种情况下,每次用户按下时,都会重新创建活动并显示"启动"主题,就像用户点击主屏幕上的图标一样。
也许这在技术上是纠正的行为,但它并没有提供出色的用户体验。此外,与配置更改不一致:在重新创建活动的情况下,它似乎以" normal"主题。
更新:在这个问题中挖掘我还试图"作弊"在活动启动时设置了初始主题,我发现当Activity#setTheme
第一次使用我的"启动"主题背景已经可见。
答案 0 :(得分:0)
此解决方案假设主要活动被杀死的唯一时间是进程被终止(忽略Don’t keep activities
情况,因为这只是调试,对吧?)。
创建一个public static boolean haveShownLaunchTheme
您的启动器类,我们称之为MainActivity
。默认为false;
在解决方案的每个活动中,让onCreate
的第一行为:
MainActivity.haveShownLaunchTheme = true;
在MainActivity.onCreate
修改如下图所示:
...从:
setTheme(R.style.Theme_MyApp);
super.onCreate(savedInstanceState);
...为:
if (!haveShownLaunchTheme) {
haveShownLaunchTheme = true;
setTheme(R.style.Theme_MyApp);
}
super.onCreate(savedInstanceState);
还添加以下onDestroy
覆盖,以便在用户通过使用后退按钮正常退出时支持重新显示启动主题:
@Override
public void onDestroy {
if (isFinishing()) haveShownLaunchTheme = false;
super.onDestroy();
}
免责声明:我没有测试过这个确切的代码,但我已成功使用带有全局静态的模式来指示该进程是否已被杀死。
答案 1 :(得分:0)
我在I + Lake(@ianhanniballake)的G +上发布了答案:
'不要保持活动'是一个开发者选项有一个原因 - 事实并非如此 你应该开发的东西,而不是代表a 用户将进入的情况。
我会用它进行测试,以确保正确恢复状态,但是 就是这个。