【问题标题】:Is it okay for me to implement a switch statement in the onCreate method?我可以在 onCreate 方法中实现 switch 语句吗?
【发布时间】:2013-09-08 04:02:11
【问题描述】:

我目前设置了一个活动的 onCreate() 方法来捕获它所做的第一件事。 Intent 总是有一个额外的 int "ACTIONCODE" 来决定 Activity 应该做什么。

活动 A 可能希望活动 Z 第一次设置变量,因此它调用 startActivity(includedIntent) ,它有一些额外的 int ActivityZ.SET_UP_FIRST_TIME (这是活动 Z 中的常量)。活动 B 可能想要更改一些变量,所以它执行了一个 startActivity(includedIntent),其意图现在包括一个额外的 int ActivityZ.CHANGE_VARIABLES 以及其他数据来更改这些变量。

Activity Z 可能只是一堆显示其变量的文本视图。根据从 getIntent() 接收到的 ACTIONCODE,它会根据需要执行操作。

我觉得这样做我可以更好地控制我的应用程序中的活动,但我担心这可能是一个非常幼稚和低效的实现。我基本上不信任(也不完全理解)onStart()、onResume()、onPause() 和 onStop()。据我所知,不能保证活动总是返回到 onResume()。当它处于 onPause() 或 onStop() 状态时,它可能已被系统杀死或完全销毁,因此只会再次返回到 onCreate()。这是我唯一信任的方法。

我什至通过 onCreate() 保存所有数据。为什么?我听说如果一个活动在 onPause() 或 onStop() 中,它很容易被杀死,甚至可能无法完成覆盖的 onPause() 或 onStop() 方法中包含的所有行。我不想在可能突然停止的方法中执行数据保存功能!

我的想法错了吗?我的恐惧是非理性的吗?如果是这样,我应该怎么做?

顺便说一下,这是我的应用截图:

【问题讨论】:

  • 您应该阅读活动生命周期。 onResume() 将始终被调用(在您提到的任何一种情况下),因为它是在活动可见之前将被调用的回调(因此它之前是否被销毁并不重要)。 onPause 保证运行,之后该活动可能会被终止(从 Honeycomb 开始同样适用于 onPause())。也许我不理解您的情况,但如果您打算立即从该活动中调用其他活动,为什么还要麻烦调用该活动?
  • @Luksprog:嗯,到目前为止,我有一个 ProfileLoadMenu 活动、一个 ActiveMenu 活动和 ProfileOptions 活动。第一个只是让用户从 ArrayList 加载配置文件。 ActiveMenu 显示当前加载的配置文件及其所有变量等等。 ProfileOptions 很简单。也许我只是在滥用活动,并没有真正使用正确的东西来设置我的应用程序。我应该为这 3 件事使用 3 个单独的意图,还是做其他事情?
  • 如果在ProfileLoadeMenu 中您只是选择了一个配置文件,那么单独作为一个活动是没有意义的。如果您仍然希望有不同的窗口,那么我将在ActiveMenu 中使用两个片段并将一个指示符传递给该活动,指示要显示两个片段中的哪一个(这取决于用户当前在 ProfileLoadMenu 中选择配置文件时应该发生的情况)。至于 ProfileOptions,它本身可能是一个活动,但我不明白为什么它应该直接从 onCreate 启动。带有应用程序屏幕的图像会非常有帮助。
  • @Luksprog 我已经添加了屏幕截图。
  • @Luksprog 另外,根据您的说法,应用程序第一次运行时,它会为活动运行 onCreate(),是吗?之后,它会沿着 onPause/onResume 或 onStop/onRestart 路线下降,甚至被破坏。我应该在 onPause 处实现保存,并在 onStart() 处重绘?变量初始化发生在onCreate期间,如果activity被销毁,它不会丢失在内存中,对吧?

标签: android android-intent android-activity switch-statement oncreate


【解决方案1】:

谢谢,Luksprog。经过一番阅读,我想我现在可以更好地信任活动生命周期。 我将在 onCreate 中实现设置,在 onResume 中加载,在 onPause 中保存!希望这是正确的。

现在我需要的只是一些关于设置活动和片段的正确方法的建议。我只需要一些一般的经验法则来决定何时以及何时不开始新的活动,或者使用片段是否更好。

【讨论】:

  • 在仅活动或带有片段的活动之间做出决定并不是很简单。引入了 Fragment 来处理各种 android 设备之间的多种屏幕尺寸,因此如果您想制作手机/平板电脑优化的应用程序,请使用 Fragment。
  • @Luksprog 好吧,如果我决定针对平板电脑进行优化,我想我以后总是可以将我的活动转换为片段。我现在只会坚持通过活动来学习。
猜你喜欢
  • 2013-07-31
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-28
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多