gpt4 book ai didi

Android 在调用 super.OnCreate() 之前停止 onCreate() 中的 Activity

转载 作者:行者123 更新时间:2023-12-02 15:18:08 48 4
gpt4 key购买 nike

我正在创建一个具有带有 fragment 的抽屉导航 Activity 的应用程序。在应用程序的每次冷启动时,我都会执行一些初始化代码,在其中加载以下内容:

  • 用户 session (无论用户是否登录)
  • 注册改造服务
  • 从服务器获取一些数据以继续启动应用。

这是我的应用程序冷启动时的流程:

  • 启动MainActivity并验证用户 session 。
  • 如果 session 有效,那么我们将打开CoreActivity
  • 如果没有,那么我们打开LoginActivity

当应用程序在一段不活动状态后被带到前台时,Android 会尝试重新启动当前的 Activity。这意味着我的初始化代码被绕过,并且执行了 CoreActivity.onCreate()。

我的所有 Activity (MainActivity 除外)都扩展了以下 super Activity :

public abstract class MasterActivity extends AppCompatActivity {

@Override
protected final void onCreate(Bundle savedInstanceState) {
this.supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
if (!CrmContext.getInstance().verifyContextSet(this)) {
return;
}
super.onCreate(savedInstanceState);
onCreateAfterContext(savedInstanceState);
}

在 CrmContext 中:

public boolean verifyContextSet(final Context context) {
boolean isContextSet = applicationContext != null;
if (isContextSet) {
return true;
}
Intent intent = new Intent(context, MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
context.startActivity(intent);
return false;
}

verifyContextSet() 中,我正在进行一些检查以确保应用程序已正确加载。如果用户 session 未正确加载。

我的问题:

如果应用程序被置于前端,则执行 CoreActivity.onCreate() 并返回 false。在本例中,我想取消 CoreActivity 的创建并再次打开 MainActivity

当我在 super.onCreate() 之前执行 verifyContextSet() 时,我会收到此异常:

android.util.SuperNotCalledException: Activity {nl.realworks.crm/nl.realworks.crm.view.CoreActivity} did not call through to super.onCreate() at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2287) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2391) at android.app.ActivityThread.access$800(ActivityThread.java:151) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1309)

我尝试先执行super.onCreate(),但随后首先创建了 Activity 内的Fragment。这意味着我的 Fragment 在执行 verifyContextSet() 之前重新创建。

所以,如果我尝试在 super.onCreate() 之前 cancel()/finish() onCreate() 已被调用,然后我收到 SuperNotCalledException。如果我先执行 super.onCreate(),那么 Fragment 就会被初始化,当 verifyContextSet() 返回 false< 时这是不允许的.

我想要执行以下操作:

  • 将应用置于前台
  • 检查应用是否已初始化
  • 如果没有,则 finish() 当前 Activity,然后重新启动应用以打开 MainActivity

最佳答案

将检查/验证代码放入 Application 子类中

public class MyApp extends Application {
//in your oncreate create sessions etc.

现在无论 MainActivity 是否重新启动,您都已经验证过了。

注意:Application 类的 onCreate() 是在任何主体之前首先运行的。

关于Android 在调用 super.OnCreate() 之前停止 onCreate() 中的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36220209/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com