应用程序启动过程:
第一步 系统为此分配一个进程
第二步 系统为此分配一个虚拟机.在Android中每个进程独占一个虚拟机.所以说android是多进程多虚拟机的
第三步 此应用程序在此虚拟机中运行
所以平时退出了一个应用程序,但是长按HOME键后即可看见它的图标.再次点击后,即可再次启动
这是因为我们是在第三个层次退出的应用程序,它的进程和虚拟机还是存在的.
应用程序启动过程详解:
在点击了图标以后.在OnClick()方法中调用startActivitySafely(intent)
然后在startActivitySafely(intent)方法中调用了startActivity(intent),此intent中必定包含了此应用程序的主activity
应用程序退出过程详解:
方式一:finish().针对单个Activity有效.当有多个Activity时,要建立Activity栈,然后遍历Activity栈,分别finish()
方式二:退出虚拟机system.exit(0)
方式三:杀死进程Process.killProcess(PID)
总结:应用程序的三种退出方法对应于应用程序启动过程的三个步骤
应用程序界面的显示过程——即 Activity 和Window和View Tree(视图树)之间的关系
在一个 Activity中我们是这样来设置布局:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置布局
}
查看setContentView(R.layout.main)源码如下:
public void setContentView(int layoutResID) {
getWindow().setContentView(layoutResID);
}
这段代码出现在Activity的源码中.
其中 getWindow()返回的是窗口,而后调用了setContentView(layoutResID).即是窗口显示了视图树(用户界面)
所以,View视图树是在window之上
继续查看getWindow()的源码:
public Window getWindow() {
return mWindow;
}
这段代码同样也出现在Activity的源码中.
继续在Activity的源码中查找mWindow,可知mWindow = PolicyManager.makeNewWindow(this);
即知是Activity产生了window.
所以setContentView(R.layout.main);可以被替换为getWindow().setContentView(R.layout.main);
总结:Activity产生了window;View视图树是在window上显示