SplashScreen - это правильный подход? - PullRequest
0 голосов
/ 04 декабря 2018

Обратите внимание, что следующее, кажется, работает нормально.Мне просто нужны мнения, если это правильная логика или если я могу сделать что-нибудь, что будет работать лучше

Так что я впервые использую заставку.до сих пор работает как задумано (или я так думаю), мне просто нужно несколько мнений, если логика, которую я использую, хороша или если я могу улучшить это.так что в основном в фоновом режиме у меня есть класс с именем Reader (асинхронная задача), где он читает по 7 различным ссылкам (как вы увидите, он вызывается 7 раз) и заполняет мою базу данных.я хочу, чтобы мой экран-заставка заполнил эту базу данных, а затем запустил mainActivity.(также держите экран достаточно длинным, чтобы показать спонсора, если он есть)

, поэтому я придумал это.Я знаю, что моя асинхронная задача не может быть нестатичной, но тогда я не смогу изменить переменную.(isAsyncCompleted) Посмотрел этот метод с этого сайта.

public class SplashActicity extends AppCompatActivity {
boolean isHandlerCompleted, isAsyncCompleted = false;

private static int SPLASH_SCREEN_TIME_OUT = 1000;

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

     MyTask myTask = new MyTask();
     myTask.execute();
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            isHandlerCompleted = true;
            if (isHandlerCompleted && isAsyncCompleted) {
                Intent intent = new Intent(SplashActicity.this, MainActivity.class);
                startActivity(intent);
                finish();
            }
        }
    }, SPLASH_SCREEN_TIME_OUT);


}

private class MyTask extends AsyncTask<Void,Void,Void> {

    @Override
    protected Void doInBackground(Void... voids) {
        Reader fromthepast = new Reader(getApplicationContext(), "http://www.lemesosblog.com/index.php?option=com_obrss&task=feed&id=7%3Alemesos-apo-to-parelthon&format=feed", "fromthepast");
        Reader international = new Reader(getApplicationContext(), "http://www.lemesosblog.com/index.php?option=com_obrss&task=feed&id=9%3Alemesos-diethni&format=feed", "international");
        Reader latestNews = new Reader(getApplicationContext(), "http://lemesosblog.com/index.php?option=com_obrss&task=feed&id=3%253Alemesos-teleftea-nea&format=feed&fbclid=IwAR1VeGagGZD_M_ACBx8tAA38afhVallFc5LG6U58HYCq8iLJFNLKsaXtVAI", "latestNews");
        Reader health = new Reader(getApplicationContext(), "http://www.lemesosblog.com/index.php?option=com_obrss&task=feed&id=6:lemesos-ygeia&format=feed", "health");
        Reader technology = new Reader(getApplicationContext(), "http://www.lemesosblog.com/index.php?option=com_obrss&task=feed&id=5%3Alemesos-tech&format=feed", "technology");
        Reader economy = new Reader(getApplicationContext(), "http://www.lemesosblog.com/index.php?option=com_obrss&task=feed&id=4:lemesos-oikonomia&format=feed", "economy");
        Reader tepak = new Reader(getApplicationContext(), "http://www.lemesosblog.com/index.php?option=com_obrss&task=feed&id=8:lemesos-tepak&format=feed", "tepak");
        economy.execute();
        health.execute();
        fromthepast.execute();
        international.execute();
        latestNews.execute();
        technology.execute();
        tepak.execute();
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        isAsyncCompleted = true;
        super.onPostExecute(aVoid);
    }
}

}

1 Ответ

0 голосов
/ 04 декабря 2018

В вашем случае, если обработчик завершит выполнение до того, как завершится асинхронизация, ваше условие будет недействительным, а ваш код не будет выполнен.ЕСЛИ нет особых требований блокировать следующую активность до указанного времени, вы должны переместить свой код в handler на onPostExecute()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...