在onCreate()期间Android应用是否可见?

时间:2017-05-21 06:33:34

标签: android android-lifecycle activity-lifecycle

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

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

3 个答案:

答案 0 :(得分:1)

您可以创建一个不可见的活动作为主要活动。

在里面你可以放置一些逻辑来决定首先向用户显示哪个活动。

清单宣言,noHistory =“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>

LandingActivity类:

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 
} 

} 

答案 1 :(得分:1)

我建议您将MainActivity保留为LAUNCHER(在singleTask模式下),并在将布局传递给它之前检查登录状态。这种方法将避免登录用户等待第二个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>

<强> MainActivity:

@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);
}

答案 2 :(得分:0)

不是已恢复已启动,但您可以执行您想要的操作..当Activity被创建时,您就是允许执行任何更改活动状态的操作,因为它不是已停止已暂停

例如,如果您愿意,可以附加fragment或更改视图!