Заставка: с помощью обработчика - PullRequest
0 голосов
/ 18 февраля 2011

Я правильно делаю? У меня есть экран-заставка (просто изображение), и onCreate () я запускаю основное действие после запуска тяжелой функции:

              SPLASH_DISPLAY_LENGHT=2500;
              new Handler().postDelayed(new Runnable(){
              public void run() {
                  LONG_OPERATING_FUNCTION(); 

                   Intent mainIntent = new Intent(this, MainActivity.class); 
                   Splash.this.startActivity(mainIntent); 
                   Splash.this.finish();
              } 
         }, SPLASH_DISPLAY_LENGHT);           

Я думаю, что у меня утечка памяти, и я пытаюсь ее найти. Я не думаю, что Splash действительно заканчивается.

Ответы [ 3 ]

4 голосов
/ 18 февраля 2011

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

В идеале вы не используете заставку, а только активируете выбранные функции MainActivity, в то время как выполняете LONG_OPERATING_FUNCTION() в AsyncTask или чем-то еще.

Если кто-то направит пистолет на вашу голову и заставит вас использовать заставку, чтобы ваши мозги не разбрызгивались, я бы сделал следующее:

  • Устраните ваши Handler и postDelayed() вызов
  • Заменить это на AsyncTask
  • В doInBackground() из AsyncTask, введите LONG_OPERATING_FUNCTION()
  • Если после выполнения LONG_OPERATING_FUNCTION() время SPLASH_DISPLAY_LENGHT [sic] не истекло, используйте SystemClock.sleep() для сна в течение оставшегося времени (или нет)
  • В onPostExecute(), начать MainActivity и позвонить finish()
1 голос
/ 28 марта 2016
Intent intent = new Intent(getApplicationContext(), AActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
getApplicationContext().startActivity(intent);

通过 使用 getApplicationContext () контекст 的 就 不会 内存 溢出; * * тысяча два

открытый класс RunnableActivity расширяет Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    System.out.println("RunnableActivity onCreate");
    setContentView(R.layout.activity_main);
    mHandler.postDelayed(mRunnable, 3000);

}

@Override
protected void onResume() {
    super.onResume();
    System.out.println("RunnableActivity onResume");
}

@Override
protected void onPause() {
    super.onPause();
    System.out.println("RunnableActivity onPause");
}

@Override
protected void onDestroy() {
    super.onDestroy();
    System.out.println("RunnableActivity onDestroy");
}

private Handler mHandler = new Handler(Looper.getMainLooper());

private Runnable mRunnable = new Runnable() {
    private WeakReference<Activity> weak = new WeakReference<Activity>(RunnableActivity.this);

    @Override
    public void run() {
        Activity a = weak.get();
        if (a != null) {
            Intent intent = new Intent(a.getApplicationContext(), AActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            a.getApplicationContext().startActivity(intent);
            a.finish();
        }
    }
};}
1 голос
/ 22 января 2012
@Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        openingSound = MediaPlayer.create(Splash.this, R.raw.applause);
        openingSound.start();
        setContentView(R.layout.firstanimal);
        Thread timer = new Thread(){
            public void run(){
                try{
                    sleep(5000);
                } catch (InterruptedException e){
                    e.printStackTrace();
                }finally{
                    Intent openingSplash = new Intent("com.softech.LearnAnimal1.STARTINGPOINT");
                    startActivity(openingSplash);
                }
            }
        };

        timer.start();
    }

    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
        openingSound.release();
        finish();

    }

Это полный java-код, в этом у вас будет opensSound с перерывом в 5 секунд, а затем вы перейдете к вашему меню или второму упражнению, но помните одну вещь, которую вы также должны поместить в фильтры с намерениями ваш манифест :) Наслаждайтесь:)

...