IApplicationThread.aidl是Android实现用来跨进程通信的接口.他的实现类是ApplicationThread,他也是ActivityThread的内部类.
ApplicationThread是Android系统中的重要组件, 他用来实现应用程序进程和系统服务之间的通信. 为什么说他实现的是应用程序进程和系统服务之间的通信呢? 因为随着ActivityThred进程的创建,都会创建对应的ApplicationThread,
class ActivityThread{
final ApplicationThread mAppThread = new ApplicationThread();
class ApplicationThread extends IApplicationThread.Stub{
---
---
}
}
他的职责主要用来管理Activity的生命周期,发送广播等操作,现在分析下他是怎么实现的生命周期的管理:
ActivityTaskManagerService会调用ClientLifecycleManager的scheduleTransaction(ClientTransaction transaction)方法:
class ClientLifecycleManager{
void scheduleTransaction(ClientTransaction transaction) throws RemoteException {
final IApplicationThread client = transaction.getClient();
transaction.schedule();
if (!(client instanceof Binder)) {
transaction.recycle();
}
}
}
这里可以看到会传入对象ClientTransaction,ClientTransaction有一个叫ActivityLifecycleItem mLifecycleStateRequest的成员变量,他保存的就是当前Activity所处的生命周期阶段.
.
继续看到调用ClientTransaction.schedule():
class ClientTransaction{
private IApplicationThread mClient;
publish void schedule(){
//可以看到在这里进行跨进程通信
mClient.scheduleTransaction(this);
}
}
然后就来到了ApplicationThread的
scheduleTransaction(ClientTransaction transaction)
class ApplicationThread{
public void scheduleTransaction(ClientTransaction transaction) throws RemoteException {
ActivityThread.this.scheduleTransaction(transaction);
}
}
class ActivityThread{
void scheduleTransaction(ClientTransaction transaction) {
transaction.preExecute(this);
sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
}
}
可以看到这一套流程走下来,就实现了ActivityTaskManagerService和ActivityThread两个进程间的通信了.