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

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

时间: 2024-08-31 00:40:08

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

广告-在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序

问题描述 在android应用程序中启动其他apk程序,被启动程序退出后返回之前的程序 大家好,我现在遇到这样的情况,我目前做的是一个android积分墙的项目,用户通过我的这个项目app做任务下载一个广告,当用户进入到我们的下载广告的apk 后,玩了一段时间后(玩了一段时间才会给积分),点击后退,当前的 广告apk 是退出了,同时我们的项目也退出了(原本我们的项目逻辑是不会退出的),回到了桌面......我们自己测试的时候并没有出现这样的情况,但是用户遇到了,并且用户反馈再次重启手机的时候,再

移动设备交互设计:Android应用程序不需要手动退出

文章描述:Android应用程序需不需要手动退出? 不止一次,也不止一个人问过这个问题.我都回答了:不需要.但是,还是要记录下来. 我们不妨从了解这个系统对于应用程序管理的一些内部机制开始说明原因. 对于Android系统而言,包含"进程"和"服务"."进程"有正在运行的,也有刚刚离开在后台缓存的."服务"是一个无界面.长时间运行的应用功能,并且不会轻易被终止. 我们知道,在Android中可以快速通过主页键(home)或者使

Android中实现“程序前后台切换效果”和“返回正在运行的程序,而不是一个新Activity”

ANDROID 一.首先是返回正在运行的程序,而不是新的ACTIVITY. 多网上关于 通知栏的例子都是打开一个新的Activity,代码也很多.根据那些代码如下    public void shownotification(String tab)    {        NotificationManager barmanager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);        Notif

防止程序多重启动

此文章是接续怜香的"DOS到Win32"系列教程第14篇的后续,阅读之前推荐查看前续文章 正如怜香所说,命令行参数在Windows中是无处不在的,只是一般感觉不到,双击一个txt文件,Windows会启动记事本程序并把txt的路径做为参数提供给它,这当然相当的快捷,一般在打开一个文件时会再一次启动相关联的程序,但是你会发现很多多文档(MDI)软件在运行的情况下不会再次启动一个新的实例,而是已经运行的程序打开了你再次需要打开的文件,这就是防止程序的多重启动. 这一篇先讲如何防止,下一篇再

AutoCAD的启动与退出

1.4.1 启动AutoCAD 首先介绍如何进入AutoCAD的图形界面中.选择操作系统"开始"菜单(Windows95/98或WindowsNT4.0)中的"AutoCAD 2000"软件包,并选择"AutoCAD 2000",然后AutoCAD将显示如图1-1所示的"启动"对话框. 无论何时开始一张新图,不管是使用向导.样板或缺省创建新图,AutoCAD都将为这张新图命名为"DRAWING1.DWG".

Android UI设计与开发教程 引导界面(五)实现应用程序只启动一次引导界面

这篇文章算是对整个引导界面开发专题的一个终结了吧,个人觉得大部分的引导界面基本上都是千篇一律 的,只要熟练掌握了一个,基本上也就没什么好说的了,要是在今后的开发中遇到了更好玩,更有趣的引导界 面,博主也会在这里及时的跟大家分享,今天的内容主要是教大家的应用程序只有在第一次启动的时候显示引 导界面,以后在启动程序的时候就不再显示了. 其实要想实现这样的效果,只要使用 SharedPreferences类,就会让程序变的非常简单,下面来详细介绍一下这个类的使用方法 一. SharedPreferen

在AndroidManifest.xml文件中设置Android程序的启动界面方法

  比如Android的Login程序和Android的Helloworld程序,但是却总不能正确运行一个正确的程序,郁闷了很久,终于在一次一次的测试后成功的在Android模拟器中运行了自建项目的程序.总结程序启动界面的设置经验如下: 在 MyEclipse建立的Android项目中,找到AndroidManifest.xml文件,双击打开. 设置程序运行后首先启动Login界面的AndroidManifest.xml文件代码如下: <?xml version="1.0" en

win8运行应用程序弹出“应用程序无法启动(0x00000XX) ”如何解决

  win8运行应用程序弹出"应用程序无法启动(0x00000XX) "如何解决         具体步骤: 1.下载DirectX Repair3.3,并将其解压出来; 2.打开"DirectX Repair",点击[检测并修复]右侧的小三角,勾选"同时更新c++"; 3.点击[检测并修复],修复工具开始自动运行; 4.修复完成后点击退出,并且重启算计即可解决应用程序出错的问题.

android-在一个程序中启动其他程序老被强退?

问题描述 在一个程序中启动其他程序老被强退? 我已经获取了手机中的程序列表,并添加了setOnItemLongClickListener()方法代码部分如下lv.setOnItemLongClickListener(new OnItemLongClickListener(){ public boolean onItemLongClick(AdapterView<?> parent View v int position long id){ String activityName = null;