Подтвердить что ты не робот

Методы работы: onCreate() и onDestroy()

Когда действие создается впервые, система вызывает метод OnContentChanged() в качестве первого метода, а последний вызов системой - это метод OnDetachedFromWindow(), когда активность убита, но в документах android говорится, что весь срок действия Activity происходит между OnCreate() и OnDestroy(). Зачем? Пожалуйста, помогите мне понять разницу между этими методами.

код:

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.widget.Toast;

public class ActivitylifecycleActivity extends Activity {
    /** Called when the activity is first created. */

    @Override
    public void onContentChanged() {
        super.onContentChanged();   
        Toast.makeText(getApplicationContext(),"1. onContentChanged()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Toast.makeText(getApplicationContext(),"2. onCreate()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStart() {
        super.onStart();
        Toast.makeText(getApplicationContext(),"3. onStart()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRestoreInstanceState(Bundle restoreInstanceState) {
        Toast.makeText(getApplicationContext(),"4. onRestoreinstaneState()", Toast.LENGTH_SHORT).show();
        super.onRestoreInstanceState(restoreInstanceState);
    }

    @Override
    public void onRestart() {
        super.onRestart();
        Toast.makeText(getApplicationContext(),"5. onRestart()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPostCreate(Bundle onpostcrete) {
        super.onPostCreate(onpostcrete);
        Toast.makeText(getApplicationContext(),"6. onPostCreate()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onResume() {
        super.onResume();
        Toast.makeText(getApplicationContext(),"7. onResume()", Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onPostResume() {
        super.onPostResume();
        Toast.makeText(getApplicationContext(),"8. onPostResume()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onAttachedToWindow() {
        super.onAttachedToWindow();
        Toast.makeText(getApplicationContext(),"9. onAttachedToWindow()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onWindowFocusChanged(boolean bo) {
        super.onWindowFocusChanged(true);
        Toast.makeText(getApplicationContext(),"10. onWindowFocusChanged()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUserLeaveHint() {
        super.onUserLeaveHint();
        Toast.makeText(getApplicationContext(),"11. onUserLeaveHint()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onUserInteraction() {
        super.onUserInteraction();
        ii=0;
        Toast.makeText(getApplicationContext(),"12. onUserInteraction()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
        super.onSaveInstanceState(savedInstanceState);
        Toast.makeText(getApplicationContext(),"13. onSaveInstanceState()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onPause() {
        super.onPause();
        Toast.makeText(getApplicationContext(),"14. onPause()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onStop() {
        super.onStop();
        Toast.makeText(getApplicationContext(),"15. onStop()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Toast.makeText(getApplicationContext(),"16. onDestroy()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        Toast.makeText(getApplicationContext(),"17. onDetachedFromWindow()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Toast.makeText(getApplicationContext(),"18. onConfigurationChanged()", Toast.LENGTH_SHORT).show();
    }

    @Override
    public boolean onSearchRequested() {
        super.onSearchRequested();
        Toast.makeText(getApplicationContext(),"19. onSearchRequested()", Toast.LENGTH_SHORT).show();
        return false;
    }
}

В этом коде OnContentChanged() вызывается до метода OnCreate() и OnDetachedFromWindow() вызывается после OnDestroy(). Почему?

4b9b3361

Ответ 1

OnCreate():

Когда начинается действие, начинается onCreate(). Он вызывается только один раз в жизненном цикле активности.

OnDestroy():

onDestroy() вызывается, когда активность заканчивает свой жизненный цикл. Он также называется один раз в жизненном цикле активности.

onContentChanged():

Этот хук вызывается всякий раз, когда изменяется представление содержимого экрана (из-за вызова Window.setContentView или Window.addContentView). Например, вы добавляете новое представление в действие или хотите обновить список, вызвав notifyDataSetChanged().

onDetachedFromWindow():

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

Ответ 2

http://developer.android.com/reference/android/app/Activity.html#onContentChanged%28%29

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

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