2012-05-02 3 views
0

Я пытаюсь понять это на какое-то время, но, похоже, я сейчас застреваю. В основном я пытаюсь понять разницу между тем, когда действие уничтожается и воссоздается, и когда процесс, на котором он выполняется, уничтожается и воссоздается.Разница между повторным созданием и повторным созданием процесса в android

В соответствии с диаграммой здесь: http://developer.android.com/reference/android/app/Activity.html, кажется, что действия воссозданы тогда и только тогда, когда восстановлен базовый процесс приложения.

Однако, скажем, создать простую программу с помощью одной кнопки:

public class HelloAndroidActivity extends Activity { 
private int test = 15; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button button = (Button)findViewById(R.id.button1); 
    button.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) { 
      Toast.makeText(getApplicationContext(), test + " ", Toast.LENGTH_SHORT) 
         .show(); 
      test++; 
     } 
    }); 
} 
} 

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

Однако программа работает все время (как вы можете видеть, когда вы переходите в диспетчер задач), поэтому процесс не был уничтожен.

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

В соответствии с диаграммой на сайте Android Activity активность создается только при слишком маленьком объеме памяти для базового процесса, но здесь она, похоже, воссоздана во многих других сценариях, таких как экран ориентация, переход в главное меню и т. д.

Итак, мой вопрос: в чем разница между жизненным циклом Activity и жизненным циклом процесса? И есть ли путь воссоздания активности, который не изображен на диаграмме Android, которая сохраняет основной процесс?

Большое спасибо за любую помощь, которая может возникнуть с этим вопросом!

+0

некоторая информация об этом: http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html – zapl

ответ

1

В соответствии с диаграммой здесь: http://developer.android.com/reference/android/app/Activity.html, кажется, что действия воссозданы тогда и только тогда, когда базовый процесс приложения воссоздается.

Есть много вещей, которые разрушат деятельность, в том числе вызова finish(), пользователь нажатием кнопки BACK (которая, по умолчанию, запускает вызов finish()) или устройство претерпевает изменения конфигурации (который, по умолчанию, уничтожает и воссоздает активность переднего плана).

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

Если «оставить программу» означает «нажмите кнопку« НАЗАД », это имеет смысл. Точно так же переключение с портрета на пейзаж - это изменение конфигурации, так что это тоже имеет смысл.

Однако программа работает все время (как вы можете видеть, когда вы переходите в диспетчер задач), поэтому процесс не был уничтожен.

Исправить.

Таким образом, процесс должен отличаться от Activity.

Исправить. Приложение может иметь десятки или сотни видов деятельности, а также множество других компонентов (услуг и т. Д.). По умолчанию все они являются частью одного процесса.

Согласно схеме на сайте Android активность, активность только воссоздан, когда есть слишком мало памяти для основного процесса,

No.

Что такое разница между жизненным циклом активности и базовым жизненным циклом процесса?

Процесс останется в памяти, пока Android не потребует памяти для чего-то другого. Android выбирает процессы для завершения на основе того, что происходит, с точки зрения возраста, активных компонентов и т. Д. Вы можете узнать больше о the process lifecycle in the documentation.

И есть ли путь воссоздания активности, который не изображен на диаграмме Android, которая сохраняет основной процесс? '

Существует много вещей, которые разрушают деятельность, указанную на диаграмме стрелкой, ведущей к onDestroy(). Я перечислил несколько из них в первом абзаце моего ответа. Когда действие уничтожается, если снова требуется экземпляр этого действия (например, пользователь перезапускает приложение), создается новый экземпляр.

+0

Ах, отлично, что ответил на мой вопрос отлично! Еще раз спасибо за быстрый ответ. – user1365680

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