应用程序启动过程:
第一步 系统为此分配一个进程
第二步 系统为此分配一个虚拟机.在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上显示

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐