Inside the Android AccountManager

Preview:

Citation preview

Inside the Android AccountManager

Account Manager

Account Manager Service

Authenticator

Integrated App

Account Manager

Account Manager Service

Authenticator

Integrated App

Zoe, Backup, …

Account Manager

Account Manager Service

Authenticator

Integrated App

HTC Account

Zoe, Backup, …

Account Manager

Account Manager Service

Authenticator

Integrated App

HTC Account

Zoe, Backup, …

system_server

Application Process

Account Manager

Account Manager Service

Authenticator

Integrated App

HTC Account

Zoe, Backup, …

system_server

Application Process

Account Manager

Account Manager Service

Authenticator

Integrated App

HTC Account

Zoe, Backup, …

Method Invocation

system_server

Application Process

Account Manager

Account Manager Service

Authenticator

Integrated App

HTC Account

Zoe, Backup, …

Binder IPC

Method Invocation

system_server

Application Process

Account Manager

Account Manager Service

Authenticator

Integrated App

HTC Account

Zoe, Backup, …

Binder IPC

Binder IPC

Method Invocation

system_server

http://www.nds.rub.de/media/attachments/files/2012/03/binder.pdf

BinderNative IPC mechanism on Android.

Implemented as kernel driver and the Binder framework.

http://www.nds.rub.de/media/attachments/files/2012/03/binder.pdf

Binder

Binder client uses a proxy approach.

Native IPC mechanism on Android.

Implemented as kernel driver and the Binder framework.

http://www.nds.rub.de/media/attachments/files/2012/03/binder.pdf

Binder

The transaction data is called Parcel. Java objects implementing Paracelable interface can be converted to Parcels. Transaction data limit is around 1MB.

Native IPC mechanism on Android.

Implemented as kernel driver and the Binder framework.

http://www.nds.rub.de/media/attachments/files/2012/03/binder.pdf

Binder

Binder server spawns binder threads to handle the incoming requests automatically.

Native IPC mechanism on Android.

Implemented as kernel driver and the Binder framework.

Android Interface Definition Language (AIDL)

• To make customized Binder interface.

• Default supported data types include primitives, String, CharSequence, List, Map.

• Non-primitive type parameters require in / out or inout tag.

• Custom data types must implement Parcelable, and declare a corresponding AIDL file.

http://developer.android.com/guide/components/aidl.html

frameworks/base/core/java/android/accounts/IAccountManager.aidl

frameworks/base/core/java/android/accounts/Account.aidl

predefined in Binder framework

generated from AIDL

frameworks/base/core/java/android/app/ContextImpl.java

AccountManager (binder client side) initialization.

frameworks/base/core/java/android/app/ContextImpl.java

AccountManager (binder client side) initialization.

frameworks/base/core/java/android/accounts/AccountManager.java

AccountManager (binder client side) initialization.

AccountManagerService (binder server side) initialization.

frameworks/base/core/java/android/accounts/AccountManagerService.java

AccountManagerService (binder server side) initialization.

frameworks/base/core/java/android/accounts/AccountManagerService.java

Simplified addAccount()

Simplified addAccount()

Binder IPC

Simplified addAccount()

Binder IPC Binder IPC

AccountManagerFuture

main thread

main thread

bkg thread

main thread

main thread

bkg thread

main thread

bkg thread

main thread

Callback through IPC

frameworks/base/core/java/android/accounts/IAccountManagerResponse.aidl

AccountManager.AmsTask.Response

Application Process

Account Manager

Account Manager Service

Authenticator

Integrated App

Asynchronized Binder IPC call through interface IAccountManager;

Response returned through interface IAccountManagerResponse

frameworks/base/core/java/android/accounts/IAccountAuthenticator.aidl

AccountManagerService.Session

AccountManagerService (binder client side) initialization.

ServiceConnection

ServiceConnection

always on main thread

AbstractAccountAuthenticator (binder server side) initialization.

frameworks/base/core/java/android/accounts/AbstractAccountAuthenticator.java

Callback through IPC

frameworks/base/core/java/android/accounts/IAccountAuthenticatorResponse.aidl

AccountManagerService.Session

Application Process

Account Manager

Account Manager Service

Authenticator

Integrated App

Asynchronized Binder IPC call through interface IAccountAuthenticator;

Response returned through interface IAccountAuthenticatorResponse

Recommended