0

我一直试图弄清楚这一点,但我现在似乎陷入了困境。基本上,我试图了解 Activity 何时被销毁和重新创建与它运行的进程何时被销毁和重新创建之间的区别。

根据此处的图表: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。

但是,程序一直在运行(正如您在任务管理器中看到的那样),因此该进程没有被破坏。

同样,如果我将变量 test 更改为静态变量,那么尽管 Activity 被销毁并重新创建,它仍会保留其值。所以流程必须与Activity不同。

根据 Android Activity 网站上的图表,只有当底层进程的内存太少时才会重新创建 Activity,但这里似乎在许多其他场景中重新创建它 - 例如屏幕方向,转到主菜单等

所以我的问题是:Activity 生命周期和底层 Process 生命周期有什么区别?是否存在 Android 图表中未描述的 Activity 重新创建路径,它保留了底层进程?

非常感谢您对这个问题的任何帮助!

4

1 回答 1

1

根据此处的图表:http: //developer.android.com/reference/android/app/Activity.html,似乎只有在重新创建底层应用程序进程时才重新创建活动。

有很多事情会破坏活动,包括调用finish()、用户按下 BACK 按钮(默认情况下会触发finish()对)。

但是,如果我离开程序并转到主菜单并重新进入它,或者我更改屏幕方向,那么它会重新设置为 15。所以必须重新创建 Activity。

如果“离开程序”的意思是“按 BACK 按钮”,那么这是有道理的。同样,从纵向切换到横向是一种配置更改,因此也很有意义。

但是,程序一直在运行(正如您在任务管理器中看到的那样),因此该进程没有被破坏。

正确的。

所以流程必须与Activity不同。

正确的。一个应用程序可能有数十个或数百个活动,以及许多其他组件(服务等)。默认情况下,它们都是单个进程的一部分。

根据 Android Activity 网站上的图表,只有在底层进程内存太少时才会重新创建 Activity,

不。

Activity 生命周期和底层 Process 生命周期有什么区别?

该进程将保留在内存中,直到 Android 需要内存用于其他用途。Android 根据正在发生的事情选择要终止的进程,包括年龄、活动组件等。您可以在文档中阅读有关进程生命周期的更多信息。

是否存在 Android 图表中未描述的 Activity 重新创建路径,它保留了底层进程?

有很多事情会破坏活动,在图中由指向 的箭头指示onDestroy()。我在回答的第一段中列举了其中的几个。一旦活动被销毁,如果再次需要该活动的实例(例如,用户重新启动应用程序),则会创建一个新实例。

于 2012-05-02T18:17:08.623 回答