Заставка определяет, какую активность загружать при запуске? - PullRequest
0 голосов
/ 04 января 2019

Я делаю заставку, которая определяет, какую Activity загрузить, основываясь на том, запускается ли приложение в первый раз (или нет) ..

Код выполняется в своем собственном действии - MainActivity, которое будет действовать в качестве экрана-заставки. Если запускается впервые , я загружаю IntroActivity .. Если он был запущен до , я загружаю PrimaryActivity.

У меня есть пара вопросов :

1) - Использует ли runOnUiThread правильный способ сделать это?

2) - Я исследовал темы, относящиеся к всплывающим экранам здесь, в StackOverflow, которые предлагают использовать Handler - рекомендуется ли это в моем конкретном сценарии использования?

3) - Должен ли я закрыть это Thread, как только я определю, какое действие загрузить, и если да, то как мне это сделать?

Бонус:

4) - Я собираюсь сделать это действие всплывающим окном в стиле загрузки ..

Какой самый простой способ добиться этого?

Заранее благодарим за любую предоставленную помощь!


Мой текущий код показан ниже:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    //  Make a Toast pop-up.
    Toast.makeText(MainActivity.this, "Checking Settings...", Toast.LENGTH_LONG).show();


    ////  BEGIN PREFERENCES CHECK  ////

    //  Set the wait time for the Splash screen.
    final int SPLASH_WAIT_TIME = 5000;

    //  Start new Thread to check for first start and load appropriate Activity.
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {

                //  Wait before continuing.
                try {
                    Thread.sleep(SPLASH_WAIT_TIME);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            //  Initialize SharedPreferences.
            SharedPreferences getPrefs = PreferenceManager
                    .getDefaultSharedPreferences(getBaseContext());

            //  Create a new boolean and preference and set it to true.
            boolean isFirstStart = getPrefs.getBoolean("firstStart", true);

            //  If the App has NEVER started before...
            if (isFirstStart) {

                //  Declare an Intent for loading IntroActivity.
                final Intent intentLoadIntro = new Intent(MainActivity.this, IntroActivity.class);

                //  Launch IntroActivity.
                runOnUiThread(new Runnable() {
                    @Override public void run() {
                        startActivity(intentLoadIntro);
                    }
                });

                //  Make a new Preferences Editor.
                SharedPreferences.Editor prefsEditor = getPrefs.edit();
                //  Edit Preference to make firstStart False so Intro never loads again.
                prefsEditor.putBoolean("firstStart", false);
                //  Apply the changes.
                prefsEditor.apply();

                //  Close MainActivity so the Back hardware button doesn't return to it.
                finish();

            }

            //  If the App HAS been started before...
            else {

                //  Declare an Intent for loading PrimaryActivity.
                final Intent intentLoadPrimary = new Intent (MainActivity.this, PrimaryActivity.class);

                //  Launch PrimaryActivity.
                runOnUiThread(new Runnable() {
                    @Override public void run() {
                        startActivity(intentLoadPrimary);
                    }
                });

                //  Close MainActivity so the Back hardware button doesn't return to it.
                finish();

            }

        }
    });

    //  Start Thread t to determine Activity to load after Splash (MainActivity).
    t.start();

//  END of onCreate.
}

//  End of MainActivity.
}

1 Ответ

0 голосов
/ 04 января 2019

Это лучший способ сделать это. Получить общий преф, чтобы увидеть, если его пользователи в первый раз. Если это так, перенесите их в первый раз, другим способом - в основной.

Если пользователь удалил приложение и переустановил, они снова считаются пользователями, поскольку эта информация хранится на локальном устройстве. Если вы хотите, чтобы этот пользователь основывался, создайте базу данных для хранения этих тегов по идентификатору пользователя. Тем не менее, поток будет аналогичным.

В вашем onCreate вашей активности Splash

//  Initialize SharedPreferences.
SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

//  Create a new boolean and preference and set it to true.
boolean isFirstStart = getPrefs.getBoolean("firstStart", true);    

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    public void run() {
        if (isFirstTime) { //first time user is here.
            Intent intent = new Intent(Splash.this, FirstTime.class);
            startActivity(intent);
            finish();
        } else { //user has been here before.
            Intent intent = new Intent(Splash.this, MainActivity.class);
            startActivity(intent);
            finish();
        }
    }
}, 500);   //half second

В вашем первом упражнении FirstTime, когда пользователь выполнит то, что вы от него хотите, вы обновите свой общий преф и передвинете его НАЗАД на заставку для проверки.

//  Make a new Preferences Editor.
SharedPreferences.Editor prefsEditor = getPrefs.edit();
//  Edit Preference to make firstStart False so Intro never loads again.
prefsEditor.putBoolean("firstStart", false);
//  Apply the changes.
prefsEditor.apply();
// Go back to Splash...
Intent intent = new Intent(FirstTime.this, Splash.class);
startActivity(intent);
finish();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...