android - 如何避免在启动 Activity 时调用 onCreate()?

标签 android android-activity stack

我想从堆栈中重新加载一个 Activity 。

我使用 startActivity() 开始新的 Activity 。当我在 Activity D 上时,我想重新加载 Activity A 而不是启动一个新的 Intent。从 D 调用 A 时我不能使用 startActivity() 因为它会触发 onCreate() 开始一个线程来获取一些数据。

编辑:更新了堆栈。

如果我使用 FLAG_ACTIVITY_REORDER_TO_FRONT,它会再次调用 onCreate() 方法。

以下是我的场景。

Login Activity ̣→ Activity A → Activity B → Activity C → Activity D → Activity A

如何避免 onCreate() 被调用?

最佳答案

您必须采取完全不同的方法。使用 startActivity()startActivityForResult() 启动 Activity 并不重要,因为 onCreate()onStart() onResume() 将在您启动 Activity 时调用。

现在,如果您的 Activity 类中有一个方法启动另一个线程来完成一些工作,那么您必须使用标志。如果您的 Activity 需要在第一次执行时自动启动线程,那么您必须将其包裹在 if 子句中以检查您在首次运行时设置的标志。

想法是让您的 Activity 在您的 Application 实例或 SharedPreferences 首次执行线程时将 bool 值设置为 true。当您返回到该 Activity 并且不希望该线程由于调用 onCreate() 而自动运行时,您必须将调用代码包装在一些 if 子句周围,如下例所示。

这是一个例子。

@Override
public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    // Other stuff

    if (!YourApplicationInstance.wasCalled) {
        // Run your thread or do something else you want to do only once.

        // Set the wasCalled flag to true to not run this code again
        // if onCreate() is called a second time.
        YourApplicationInstance.wasCalled = true;
    }
}

你必须阅读 Using Application context everywhere?了解如何实现我的伪类 YourApplicationInstance

关于android - 如何避免在启动 Activity 时调用 onCreate()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6905774/

相关文章:

java - 通过单击按钮获取父对象

Python广度优先搜索矩阵打印路径

c++ - 调试错误 : stack around the variable 'cardDesc' was corrupted

Android,Cognito : can sign in, 但无法进行经过身份验证的 AWS 调用

android - 引用特定 fragment 时 SectionsPagerAdapter 类中的错误

c# - 如何创建 xamarin 表单按钮左角半径

android - 对 Activity 的弱引用 (Android)

android - Activity 从在 Activity 堆栈顶部打开的通知开始

android startactivity显示问题

c - gdb print 或 stack alloc 有什么问题?