我有一个应该只创建一次的Activity。也就是说,onCreate
只能被调用一次。如果再次调用它,我希望Activity不执行任何操作。
建议您执行以下操作吗?
protected void onCreate(Bundle savedInstanceState) {
this.setTheme(android.R.style.Theme_Translucent_NoTitleBar_Fullscreen);
super.onCreate(savedInstanceState);
if(onCreateWasCalledAlreadyBoolean) {
setResult(RESULT_OK);
finish();
return;
}
//Do other stuff here
}
答案 0 :(得分:1)
我假设您理解how the activity life cycle works。我的意思是,你并没有试图避免在这里不适用的东西(认为只要onCreate
等,onRestart
可能被多次调用。)。
从技术上讲,它非常好。
但是,你应该更多地担心为什么你需要再次呼叫你的活动(" A ")如果它不应该'如果那是你正在思考的东西,那么就要创造出来。
如果您已经发现自己正在检查您的活动 A 是否已被"称为" (?),这可能意味着之前的活动(" B ")在应用程序的逻辑流程中出错,而 B 则改为应该检查它是否必须实际上开始该活动 A 。我的意思是,如果您需要决定是否必须调用某个活动,请在启动之前检查。
如果你重新开始活动,我不认为这是适用的(例如:回家,然后导航回来),但是你应该再次从你离开的地方重新开始(<\ n \ n> em> B 我可以告诉他们。您不会导航回 A 。并且你没有提供太多细节,所以我猜这是一种闪屏,就像evilmage93所说的那样。
如果这确实是某种启动画面,我会建议每当用户向后导航以从任务堆栈中删除你的应用程序时显示它(与他的建议相反)。换句话说,每当用户从其前门&#34;
重新启动应用程序时虽然这最终是一个设计决定,但我更喜欢在第一次在堆栈中加载应用程序(&#34;输入&#34;)时看到启动画面,它应该可以正常工作如果你(显然)在调用 B 之前完成 A (即使在第一次运行时,启动屏幕本身也应该finish
。这是一致性的问题:每当用户执行相同的任务时,相同的应用程序应该以相同的方式运行(从#34;前门开始应用程序&#34;)。
尽管如此,我还是回答了你的一些问题,因为你提出了这样的问题。
//编辑:
最后,通过查看onCreateWasCalledAlreadyBoolean
我担心你可能会试图重新发明部分活动生命周期机制。在这种情况下,请不要继续执行常规活动逻辑,因为用户期望这种行为。 一般我不建议人们打破活动的正常加载,因为它被系统杀死并重新启动。
答案 1 :(得分:-1)
我不明白为什么不。根本不重启活动会不会更简单?
你担心什么不好?性能......未捕获的例外情况......清晰度是什么?