程序的启动和退出以及activity和window和视图树的关系

简介: 应用程序启动过程: 第一步 系统为此分配一个进程 第二步 系统为此分配一个虚拟机.在Android中每个进程独占一个虚拟机.所以说android是多进程多虚拟机的 第三步 此应用程序在此虚拟机中运行   所以平时退出了一个应用程序,但是长按HOME键后即可看见它的图标.

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

相关文章
|
5月前
|
Python
创建一个新的Tkinter窗口实例,并将其赋值给变量`root`。这个窗口是应用程序的主窗口。
创建一个新的Tkinter窗口实例,并将其赋值给变量`root`。这个窗口是应用程序的主窗口。
|
语音技术 Android开发
QMUI实战(三)——你是如何启动你的第一个 Fragment 的?
上一篇文章讲了一些关于 Activity 和 Fragment 的一些零碎的知识点,只有深入的了解了它们,我们才能合理的运用它们。UI相比于数据流,更灵活也更混乱,合理运用不同组件,可以使得条例更清晰,代码量更少。
233 0
|
存储 缓存 索引
更好的 RecyclerView 表项子控件点击监听器
上篇介绍了一种新的监听 RecyclerView 表项点击事件的方法。实现了将点击事件和RecyclerView.Adapter解耦。这一篇介绍如何监听 RecyclerView 表项子控件点击事件。
595 0
|
设计模式 缓存 前端开发
理清Activity、View及Window之间关系
理清Activity、View及Window之间关系
|
Android开发
Activity、Window、View三者关系
目录介绍 01.Window,View,子Window 02.什么是Activity 03.什么是Window 04.什么是DecorView 05.什么是View 06.关系结构图 07.Window创建过程 08.
1015 0
|
缓存 前端开发 Java
Activity显示到Window的过程
写在前面的话 今天看到一个新闻,关于虾米音乐的程序员写的注释。 好像图都绿了,突然间想起在我曾经老大的影响下,我的Log输出已经变成了fxxk。
998 0
|
Android开发
Activity从创建到显示的整个过程
写在前面的话 今天有点烦,有点烦。项目写的乱成团,改起需求真要完。此后当个加班狗,无钱无名心要宽。 昨晚写到十一点,我都差点不相信这是我自己了。 今天接着昨天的节奏来,准备写下关于Activity从创建到显示的整个过程。
964 0