ActivityManagerService服务框架:

ActivityManagerService在android中主要的作用有二部分:

(1)activity栈管理

(2)消息分发

activity栈管理:

activity 的生命周期:

ActivityManagerService服务详解" height="688" width="521" style="border:1px solid black;">

在android中启动Activity的方式如下:

startActivity()

Activity.java(frameworks\base\core\java\android\app)

(1)@Override

publicvoid startActivity(Intent intent) {

startActivityForResult(intent, -1);

}

(2)public void startActivityForResult(Intent intent, intrequestCode) {

if (mParent == null) {

Instrumentation.ActivityResult ar =

mInstrumentation.execStartActivity(

this, mMainThread.getApplicationThread(), mToken, this,

intent, requestCode);

。。。。。。

}

(3)上面的代码中有如下一段:

Instrumentation.ActivityResult ar =

mInstrumentation.execStartActivity(

this, mMainThread.getApplicationThread(), mToken, this,

intent, requestCode);

(4)public ActivityResult execStartActivity(

。。。。。。

try {

//调用AtivityMangerServices startActivity

int result = ActivityManagerNative.getDefault()

.startActivity(whoThread, intent,

intent.resolveTypeIfNeeded(who.getContentResolver()),

null, 0, token, target != null ? target.mEmbeddedID : null,

requestCode, false, false);

checkStartActivityResult(result, intent);

} catch (RemoteException e) {

}

return null;

}

从上面(1)--(4)的代码流程我们可以知道当在activity中调用startActivity函数是最终回通过AIDL调用到ActivityManagerServicestartActivity所以ActivityManagerService和activity有如下的关系:

(1)在ActivityManagerService中,有一个用来管理activity的地方:mHistory栈,这个mHistory栈里存放的是服务端的activity记录HistoryActivity。处于栈顶的就是当前处于运行状态的activity。

final ArrayList mHistory = new ArrayList();

(2)当应用程序启动的时候会启动一个线程ActivityThread。注意每个应用程序都有一个ActivityThread与之对应

public static final void main(String[] args) {

SamplingProfilerIntegration.start();

Process.setArgV0("<pre-initialized>");

Looper.prepareMainLooper();

ActivityThread thread = new ActivityThread();

thread.attach(false);

。。。。。。

}

private final void attach(boolean system) {

。。。。。。

IActivityManager mgr = ActivityManagerNative.getDefault();

try {

mgr.attachApplication(mAppThread);//调用ActivityManagerService的attachApplication将线程信息加入到ActivityManagerService端的ProcessRecord

}

。。。。。。

}

(3)ActivityThread端的activity信息全部被存储在ActivityThread的成员变量mActivities中,在mActivities中,记录了应用程序创建的所有activity实例记录,对应的是ActivityRecord。

finalHashMap<IBinder,ActivityRecord>mActivities=newHashMap<IBinder,ActivityRecord>();

ActivityThread与ActivityManagerService关系图如下:

ActivityManagerService服务详解" width="554" height="231" style="border:1px solid black;">

(1)scheduleLaunchActivity方法:

public finalvoid scheduleLaunchActivity(Intent intent, IBinder token, intident,

ActivityInfo info, Bundle state,List<ResultInfo> pendingResults,

List<Intent> pendingNewIntents,boolean notResumed, boolean isForward) {

ActivityRecord r = new ActivityRecord();

r.token = token;

r.ident = ident;

r.intent = intent;

r.activityInfo = info;

r.state = state;

r.pendingResults = pendingResults;

r.pendingIntents = pendingNewIntents;

r.startsNotResumed = notResumed;

r.isForward = isForward;

queueOrSendMessage(H.LAUNCH_ACTIVITY, r);//发送消息给ActivityThread.handleMessage()中处理

}

public void handleMessage(Message msg) {

switch (msg.what) {

case LAUNCH_ACTIVITY: {

ActivityRecord r = (ActivityRecord)msg.obj;

r.packageInfo = getPackageInfoNoCheck(

r.activityInfo.applicationInfo);

handleLaunchActivity(r, null);

} break;

。。。。。。

}

scheduleLaunchActivity调用时会使用消息队列的方式调用到handleMessage函数,同时handleMessage会调用handleLaunchActivity,此函数的作用主要是将activity信息加入到mActivity中同时启动activity,启动activity时涉及到window、view、windowManager相关知识

待续。。。。。。


更多相关文章

  1. Android(安卓)CTS 测试总结
  2. android基础---->Parcelable的使用
  3. Android(安卓)Studio 运行模拟器启动失败
  4. WebView在Fragment中点击返回键返回上一页
  5. android全屏去掉title栏的多种实现方法
  6. Android之Service学习篇一:Service启动方式之startService
  7. Android:WebView与Javascript交互(相互调用参数、传值)
  8. Mac下启动AndroidStudio失败
  9. Android调用系统默认浏览器访问的方法

随机推荐

  1. android 下改变默认的checkbox的 选中 和
  2. 4.0后configChanges失效的解决
  3. android广播监听短信并显示内容
  4. android通讯录实例(二)
  5. Android(安卓)UI(6)Building Apps with M
  6. FragmentTabHost使用
  7. Android(安卓)传感器hal层分析
  8. Android(安卓)LCD(二):LCD常用接口原理篇
  9. Android(安卓)activity属性设置大全
  10. Android中onResume()的启动执行顺序