【发布时间】: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