2013-08-05 2 views
2

У меня есть SplashScreenActivity, который будет запускаться каждые 2 минуты, если на MainActivity не обнаружено касания. Если нажать кнопку «Старт» в SplashScreenActivity, она запустит MainActivity.Вернуться к действии без создания нового экземпляра

Моя проблема в том, что при нажатии кнопки «Старт» на SplashScreenActivity каждый раз создается новый экземпляр MainActivity, поэтому каждый раз загружайте мои библиотеки и инициализацию (в OnCreate()). Это значительно замедляет мое приложение и замедляется при нажатии кнопки. Я только хочу, чтобы он запускал после при первом запуске приложения.

Я попытался с помощью

new Handler().postDelayed(new Runnable() {  
      /* 
      * Showing splash screen with a timer. This will be useful when you 
      * want to show case your app logo/company 
      */ 

      @Override 
      public void run() { 
       // This method will be executed once the timer is over 
       // Start your app main activity 
       Intent i = new Intent(SplashScreen.this, MainActivity.class); 
       i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
       startActivity(i); 

       // close this activity 
       finish(); 
      } 
    }, SPLASH_TIME_OUT);   

... когда Намерение начал, но мои библиотеки и инициализации в OnCreate() в MainActivity по-прежнему работать снова.

При нажатии кнопки 'Пуск' нажата в SplashScreenActivity, запускает следующий метод:

public void startIntent(View v){ 
     Intent i = new Intent(SplashScreen.this, MainActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     startActivity(i); 
    } 

Любая помощь?


В настоящее время есть строки (вынутые setFlags):

Intent intent = new Intent(Email.this, MainActivity.class); 
startActivity(intent); 

и до сих пор OnCreate MainActivity в() вызывается каждый раз, когда деятельность началась.


Так я узнал, что если я установил следующее:

intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

Я могу успешно вернуться к моему MainActivity без него создать новый экземпляр.

Для получения дополнительной информации нажмите here.

+1

еще код, пожалуйста, можем ли мы видеть onClickListener для Button и вашего MainActivity. Спасибо – Keeano

+0

Привет @KeeanoMartin, сделано! Благодарю. :) – LKB

+0

Теперь, когда вы его решили, вы должны написать решение в качестве ответа и принять его. Это поможет будущим искателям и пометит этот вопрос как решаемый. – Geobits

ответ

1

Если вы просто хотите, чтобы показать SplashScreen (то есть изображение), то вам следует рассмотреть, чтобы сделать ImageView в любой компоновке на том же уровне, что и основной раскладке.

Затем вы можете сделать ImageView/SplashScreen видимым или invisble в вашем коде.

Таким образом, вы можете сэкономить много работы.

1

Intent.FLAG_ACTIVITY_CLEAR_TOP очищает все, что находится над целевой деятельностью в стеке. В вашем случае, когда вы вызываете SplashScreen, вы говорите, что MainActivity закрывается.

+0

Ах ... Понятно. Вы знаете, как просто «переключиться» на другую активность, не закрывая текущий? – LKB

+0

Только не устанавливайте этот флаг. избавиться от строки 'setFlags()'. Вы можете сохранить его при переходе от всплеска к основному виду деятельности.Просто не наоборот. – Geobits

+0

Спасибо @Geobits. Я вынул строку setFlags - все равно создается новый экземпляр MainActivity каждый раз и снова запускается OnCreate(). Фактически, OnCreate() в MainActivity выполняется ** дважды **. – LKB

Смежные вопросы