Android 应用程序在 onCreate() 期间可见吗?

Is Android app visible during onCreate()?

我计划在 MainActivityonCreate 中检查用户的登录状态 - 如果用户已登录 - 立即重定向到其他视图(例如 ProfileActivity

我担心 MainActivity 在消失之前会闪烁到用户视图中。这有什么问题吗?

您可以创建一个隐形 activity 作为主要 activity。

您可以在其中放置一些逻辑来确定首先向用户显示哪个activity。

清单声明,无历史记录="true"

<activity
    android:name=".LandingActivity"
    android:launchMode="singleInstance"
    android:noHistory="true" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

登陆活动class:

public class LandingActivity extends Activity { 

@Override
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 

    Intent intent = new Intent(); 
    Class<?> firstActivityClass; 
    try{ 
        String className = getFirtsActivityClassName(); 
        firstActivity = Class.forName(className); 
    } 
    catch (ClassNotFoundException e) { 
        firtsActivity = MainActivity.class; 
    } 
    intent.setClass(getApplicationContext(), firstActivity); 
    startActivity(intent); 

    finish(); 
} 

private String getFirtActivityClassName() {       
    // Here the logic 
} 

} 

它不是已恢复已开始,但您可以执行您想要的操作..在创建 Activity 时,您 允许 执行任何改变 activity 状态 的操作,因为它不是 已停止已暂停

例如,您可以附加 fragment 或根据需要更改视图!

我建议您将 MainActivity 保持为 LAUNCHER(在 singleTask 模式下)并在将布局传递给它之前检查登录状态。这种方法将避免登录用户等待 2nd Activity 启动。

请注意,在@Nicola De Fiorenze 的回答中,Activity 实例在所有情况下都会被杀死。因此,您将为已经通过登录阶段的用户创建 2 个 Activity 实例。

代码可能如下所示:

清单:

<activity
    android:name="MainActivity"
    android:launchMode="singleTask">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

主要Activity:

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    if(!AuthUtils.isLoggedIn()){
        LoginActivity.startActivity(this);
        finish();
        return;
    }

    // Once you know user is logged in, pass layout to activity
    setContentView(resLayoutId);
}