Видимо ли приложение Android во время onCreate()?

Я планирую проверить статус входа пользователя в onCreate из MainActivity - и если пользователь вошел в систему - немедленно перенаправить на другой вид (например, ProfileActivity)

Я переживаю что MainActivity будет мигать в представлении пользователей, прежде чем исчезнуть. Это беспокоит?

3 ответа

Решение

Я бы предложил вам сохранить MainActivity как LAUNCHER (на singleTask режим) и проверьте состояние входа в систему, прежде чем передать макет к нему. Такой подход позволит избежать входа в систему пользователей, ожидающих запуска 2nd Activity.

Обратите внимание, что в ответе @Nicola De Fiorenze экземпляр Activity будет убит во всех случаях. Следовательно, вы создадите 2 экземпляра Activity даже для пользователей, которые уже прошли фазу входа.

Код может выглядеть так:

Manifest:

<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>

Основная деятельность:

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

Вы можете создать невидимую активность в качестве основной.

Внутри вы можете поместить некоторую логику, которая определяет, какую активность сначала показывать пользователю.

Декларация манифеста, с 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 
} 

} 

Он не возобновлен или не запущен, но вы можете выполнить действие, которое хотите. Когда Activity создается, вам разрешено делать любые действия, которые изменяют состояние активности, поскольку оно НЕ остановлено или приостановлено!

Например, вы можете прикрепить fragment или измените представление, если хотите!

Другие вопросы по тегам