Android应用程序启动过程源代码分析

前文简要介绍了Android应用程序的Activity的启动过程。在Android系统中,应用程序是由Activity组成的,因此,应用程序的启动过程实际上就是应用程序中的默认Activity的启动过程,本文将详细分析应用程序框架层的源代码,了解Android应用程序的启动过程。

在上一篇文章Android应用程序的Activity启动过程简要介绍和学习计划中,我们举例子说明了启动Android应用程序中的Activity的两种情景,其中,在手机屏幕中点击应用程序图标的情景就会引发Android应用程序中的默认Activity的启动,从而把应用程序启动起来。这种启动方式的特点是会启动一个新的进程来加载相应的Activity。这里,我们继续以这个例子为例来说明Android应用程序的启动过程,即MainActivity的启动过程。

MainActivity的启动过程如下图所示:

Android应用程序启动过程源代码分析

下面详细分析每一步是如何实现的。

Step 1. Launcher.startActivitySafely

在Android系统中,应用程序是由Launcher启动起来的,其实,Launcher本身也是一个应用程序,其它的应用程序安装后,就会Launcher的界面上出现一个相应的图标,点击这个图标时,Launcher就会对应的应用程序启动起来。

Launcher的源代码工程在packages/apps/Launcher2目录下,负责启动其它应用程序的源代码实现在src/com/android/launcher2/Launcher.java文件中:

/**  * Default launcher application.  */   public final class Launcher extends Activity           implements View.OnClickListener, OnLongClickListener, LauncherModel.Callbacks, AllAppsView.Watcher {          ......          /**      * Launches the intent referred by the clicked shortcut.      *      * @param v The view representing the clicked shortcut.      */       public void onClick(View v) {           Object tag = v.getTag();           if (tag instanceof ShortcutInfo) {               // Open shortcut                final Intent intent = ((ShortcutInfo) tag).intent;               int[] pos = new int[2];               v.getLocationOnScreen(pos);               intent.setSourceBounds(new Rect(pos[0], pos[1],                   pos[0] + v.getWidth(), pos[1] + v.getHeight()));               startActivitySafely(intent, tag);           } else if (tag instanceof FolderInfo) {               ......           } else if (v == mHandleView) {               ......           }       }          void startActivitySafely(Intent intent, Object tag) {           intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);           try {               startActivity(intent);           } catch (ActivityNotFoundException e) {               ......           } catch (SecurityException e) {               ......           }       }          ......      }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwgxww.html