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

jsp*_*jsp 4 stack android android-activity

我想从堆栈重新加载一个活动.

startActivity()用来开始新的活动.当我在活动D上时,我想重新加载活动A而不是启动新的意图.从DstartActivity()调用A时我无法使用,因为它会触发启动线程来获取某些数据.onCreate()

编辑:更新了堆栈.

如果我使用FLAG_ACTIVITY_REORDER_TO_FRONTonCreate()再次调用该方法.

以下是我的情景.

Login Activity ?? Activity A ? Activity B ? Activity C ? Activity D ? Activity A
Run Code Online (Sandbox Code Playgroud)

我怎么避免onCreate()被叫?

Oct*_*ean 5

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

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

我们的想法是让您的Activity在您的Application实例中或SharedPreferences首次执行线程时将布尔值设置为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;
    }
}
Run Code Online (Sandbox Code Playgroud)

你必须阅读在任何地方使用应用程序上下文?了解如何实现我的伪类YourApplicationInstance.