- 浏览: 229887 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
sfshine:
非常好非常好
Android 窗口管理 -
mthhk:
...
android3.0之Fragment(碎片)基础 -
FrankHB1989:
“C/C++标准不会保证这样的代码一定不会出错”的依据?你要说 ...
Duff's Device -
2006003845:
请问知道 刚体之间怎么不碰撞嘛 ?相互穿插
JBOX2D分析
启动activity:
**android.process.acore进程
1.Acticity.startActivityForResult()
2.Instrumention.execStartActivity();
3.ActivityManagerNative.getDefault()
.startActivity()
3.1 ActivityManagerNative.getDefault()返回的是ActivityManagerProxy的实例,
它只是一个代理类,这个代理类实际上代理的是IBinder b = ServiceManager.getService("activity");
这个Service。
3.2 这个Service是什么时候添加进来的呢?
在SystemServer.java的run()中有调用
ActivityManagerService.setSystemProcess();
ServiceManager.addService("activity", m);
这里还会添加许多系统关键服务。
(TODO:查看在SystemServer的Log输出)
**system_process进程
4 ActivityManagerNative
|--ActivityManagerService
在ActivityManagerNative的onTransact方法中最终提供了服务:
case START_ACTIVITY_TRANSACTION:
ActivityManagerService.startActivity();
--startActivityLocked(IApplicationThread caller,
Intent intent, String resolvedType,
Uri[] grantedUriPermissions,
int grantedMode, ActivityInfo aInfo, IBinder resultTo,
String resultWho, int requestCode,
int callingPid, int callingUid, boolean onlyIfNeeded,
boolean componentSpecified)
--startActivityUncheckedLocked(r, sourceRecord,
grantedUriPermissions, grantedMode, onlyIfNeeded, true)
在这个方法里面检查权限,解析intent中的Flag。。。
--startActivityLocked(HistoryRecord r, boolean newTask)
--resumeTopActivityLocked(HistoryRecord prev)
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
--startProcessLocked(String processName,ApplicationInfo info, boolean knownToBeDead, int intentFlags,String hostingType, ComponentName hostingName)
--startProcessLocked(ProcessRecord app,String hostingType, String hostingNameStr)
在这里启动一个进程用来host这个应用
int pid = Process.start("android.app.ActivityThread",
mSimpleProcessManagement ? app.processName : null, uid, uid,
gids, debugFlags, null);
ActivityManagerService.java
--startSpecificActivityLocked(HistoryRecord r,boolean andResume, boolean checkConfig)
--realStartActivityLocked(HistoryRecord r,ProcessRecord app, boolean andResume, boolean checkConfig)
--app.thread.scheduleLaunchActivity //scheduleLaunchActivity()@IApplicationThread.java
--scheduleLaunchActivity()@ActivityThread.java //这里实际是ApplicationThreadNative提供的服务
--handleMessage()@H$ActivityThread.java
--handleLaunchActivity()@ActivityThread.java
--Activity performLaunchActivity(ActivityRecord r, Intent customIntent)@ActivityThread.java //这时真正的Activity对象被构造出来
--mInstrumentation.newActivity() //通过反射构造出Activity对象
--activity.attach() //初始化Activity,生成一个window对象,设置各种状态等等
--mInstrumentation.callActivityOnCreate(activity, r.state); //调用Activity的onCreate()方法
到这里,我们自己写的activity的onCreate()方法已经被系统调用了,接下来依次回调生命周期方法:
--activity.performStart();
--mInstrumentation.callActivityOnStart(this);
--mInstrumentation.callActivityOnRestoreInstanceState(activity, r.state);
--mInstrumentation.callActivityOnPostCreate(activity, r.state);
--mActivities.put(r.token, r); //将这个activity入栈
然后就要调用onResume()方法了:
--handleResumeActivity(IBinder token, boolean clearHide, boolean isForward)
--performResumeActivity(token, clearHide);
--r.activity.performResume();
--performRestart()@Activity.java;
--mInstrumentation.callActivityOnRestart(this);
--mInstrumentation.callActivityOnStart(this);
--mInstrumentation.callActivityOnResume(this);
onResume()已经调用完毕,一个activity的逻辑处理结束了,但是这时候屏幕上还不会显示任何东西,因为View还没有添加进去
--r.window.getDecorView(); //开始把DecorView添加进Window
--wm.addView(decor, l);
至此一个Activity启动结束。
发表评论
-
Java中循环嵌套跳出的高效写法
2014-04-24 19:31 3140(下面写的这些并不是Jdk的新特性,也不是Java某个版本提供 ... -
Android各版本新增功能一览(转)
2013-12-05 20:43 1682Android3.0新增功能:主要增加全息主题 ... -
NotificationManager和Notification的使用总结(转)
2013-11-26 12:51 610这几天一直在修改twig ... -
Android应用程序资源的编译和打包过程分析 (转自老罗的博客)
2013-11-13 10:57 15512我们知道,在一个APK文件中,除了有代码文件之外,还 ... -
Proguard 源码分析 (七) 混淆
2013-11-10 21:19 1789本章我们讲Proguard非常重要的一个步骤:混淆Obfu ... -
Proguard源码分析(六)前文总结
2013-11-05 14:40 1061目前,我们读了Proguard的 ... -
Proguard源码分析(五) ConfigurationParser.keep参数
2013-10-31 14:43 3913本章节我们绕回来讲Keep参数,也就是Configurat ... -
Proguard源码分析(四) 压缩
2013-10-30 10:59 1105上一次我们讲了seed文件,这次我们说压缩,对应的输出文件是 ... -
Proguard源码分析(三)Seed文件
2013-10-29 12:45 1516Seed文件就是保持住的类文件,直白一点就是不被混淆的文件, ... -
Proguard源码分析(二)输出文件
2013-10-28 10:28 896ProGuard outputs thefollowing ... -
Android 2.2.2到Android 4.2.2源码下载地址(转)
2013-10-28 10:13 985Android 2.2.2到Android 4.2.2源码下 ... -
代码混淆器Proguard源码分析(一) 读取
2013-10-22 19:40 2289Proguard是Android中经常用的混淆工具,当然你也 ... -
Android内存之VSS/RSS/PSS/USS
2013-09-25 14:07 679Terms VSS - Vi ... -
chrome开源工程(转)
2013-09-13 10:42 1306在chrome地址栏输入about:credits就可以看 ... -
dex文件结构(转)
2013-09-03 14:10 1005Dex文件和Dalvik虚拟机 在Android系统中 ... -
android clipPath切割画布
2013-08-29 12:00 6221(转自:http://wallage.blog.163.co ... -
Android WebView控件
2013-06-06 11:46 2240android.webkit库聚合了webkit内核的浏览器 ... -
dumpsys命令~(非常有用~)
2013-04-03 12:02 0dumpsys是系统中重要的函数,我们来看看它如何使用,都能 ... -
内存监控命令~
2013-04-03 00:30 0meminfo 命令:cat /proc/meminfo ... -
adb常用命令
2013-04-03 00:17 1084Android 调试桥(adb)是多种用途的工具,该工具可以 ...
相关推荐
在处理启动Activity的过程中,还需注意以下几点: 1. **权限管理**:如果启动的Activity需要特定权限,记得在AndroidManifest.xml中声明这些权限。 2. **任务栈管理**:通过Intent的FLAG_ACTIVITY_NEW_TASK标志...
无论是通过 Launcher 来启动 Activity,还是通过 Activity 内部调用 startActivity 接口来启动新的 Activity,都通过 Binder 进程间通信进入到 ActivityManagerService 进程中,并且调用 ActivityManagerService....
Activity启动过程
【标题】"从网页启动Activity"这一主题主要探讨的是如何在Android应用开发中,通过网页链接触发Android设备上的Activity启动,实现Web与App之间的交互。这通常涉及到WebView组件的使用,以及利用Intent过滤器来捕获...
startActivity方法是用于启动Activity组件的关键方法,他可以将Intent对象传递给ActivityManagerService,请求启动MainActivity组件。startActivity方法还可以设置Activity的启动标志位,例如“Intent.FLAG_ACTIVITY...
当我们谈论“启动Activity”时,这是Android应用中一个至关重要的过程。本文将深入探讨如何使用`startActivityForResult` API来启动一个Activity,并理解其背后的机制。 首先,让我们了解Activity的基本概念。...
### 一、Intent启动Activity #### 1. 显式启动 显式启动是通过Intent明确指定要启动的Activity的类名。创建Intent时,你需要在构造函数中传入当前Activity(`this`)和目标Activity的Class对象,如下所示: ```...
`startActivityForResult`方法是Android SDK提供的一种特殊启动Activity的方式,主要用于实现从一个Activity(我们称之为"启动者"或"父Activity")启动另一个Activity("被启动者"或"子Activity"),并在子Activity...
- **系统服务层**:AMS接收到消息后,执行`ActivityManagerService.startActivity()`,开始创建和启动Activity。 3. **AMS中的启动步骤** - **验证权限**:检查发起启动请求的应用是否有启动目标Activity的权限。...
6. 添加动画的监听器,确保在动画结束后启动新的Activity(Activity B)。 在Activity B中,我们需要反转动画过程,即从180度翻转回0度。可以通过复制Activity A的动画逻辑并在适当的地方调整参数来实现这一点。 ...
7. **Intent Flag**:启动Activity时可以设置Intent的Flag,例如FLAG_ACTIVITY_NEW_TASK表示启动一个新的任务,FLAG_ACTIVITY_CLEAR_TOP则会清除目标Activity之上所有未完成的Activity。 8. **Transition动画**:...
然而,通过Hook技术,我们可以在运行时动态地创建和启动Activity,绕过传统的注册流程。这在插件化开发中尤其有用,因为插件可能在主应用安装时不存在,或者为了实现动态加载和更新。 3. **Hook Activity的启动过程...
"动画启动Activity"是一个关于如何为应用程序的Activity添加各种进入动画效果的专题,非常适合初级到中级水平的开发者进行学习和实践。这个专题主要涉及到Android中的视图动画(View Animation)和属性动画...
为了添加翻转效果,我们可以在Intent的启动过程中添加自定义的过渡动画。 Android提供了多种内置的Activity转场动画,如淡入淡出、推动等,但翻转效果需要我们自定义。我们可以创建一个XML动画资源文件,定义一个从...
在“activity四大启动方式demo”中,开发者可能会通过Logcat打印出每个Activity的启动过程,包括调用的方法如onCreate()、onStart()、onResume()等,以及相关的taskID。taskID是Android系统分配给每个Task的唯一标识...
总的来说,这个项目提供了一个实践平台,让我们能够了解并练习如何使用Intent启动Activity,以及如何在Android项目中配置和管理构建过程。通过研究这些文件,开发者可以加深对Android应用生命周期、组件通信以及构建...
Android应用程序的Activity启动过程简要介绍和学习计划
在应用的启动Activity中添加以下代码: ```java if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (getSelfPermission(Manifest.permission.RECEIVE_BOOT_COMPLETED) != PackageManager.PERMISSION_...