ClientTransaction : 客户端事务
/**
* 定义ClientTransaction或其item可以在客户端上执行的操作。@hide
*/
public abstract class ClientTransactionHandler {
// 调度(跟阶段相关的)逻辑和处理程序。
/** 准备并安排事务执行 */
void scheduleTransaction(ClientTransaction transaction){
transaction.preExecute(this);
sendMessage(ActivityThread.H.EXECUTE_TRANSACTION, transaction);
}
/** 立即执行事务而无需调度它。这用于本地请求,因此它也将回收事务。 */
@VisibleForTesting
public void executeTransaction(ClientTransaction transaction){
transaction.preExecute(this);
getTransactionExecutor().execute(transaction);
transaction.recycle();
}
/** 获取TransactionExecutor,它将执行活动的生命周期转换和回调。 */
abstract TransactionExecutor getTransactionExecutor();
abstract void sendMessage(int what, Object obj);
// 准备与阶段相关的逻辑和处理程序。通知挂起的变更或进行其他内部记帐的方法。
/** 设置挂起配置,以防其他事务项更新它。 */
public abstract void updatePendingConfiguration(Configuration config);
/** 设置当前进程状态 */
public abstract void updateProcessState(int processState, boolean fromIpc);
// 执行与阶段相关的逻辑和处理程序。这里的方法执行实际的生命周期事务并传递回调。
/** 销毁Activity */
public abstract void handleDestroyActivity(IBinder token, boolean finishing,
int configChanges, boolean getNonConfigInstance, String reason);
/** 暂停Activity */
public abstract void handlePauseActivity(IBinder token, boolean finished,
boolean userLeaving, int configChanges,
PendingTransactionActions pendingActions, String reason);
/** 继续Activity */
public abstract void handleResumeActivity(IBinder token, boolean finalStateRequest,
boolean isForward, String reason);
/** 停止Activity */
public abstract void handleStopActivity(IBinder token, boolean show, int configChanges,
PendingTransactionActions pendingActions, boolean finalStateRequest,
String reason);
/** 向服务器报告Activity已停止 */
public abstract void reportStop(PendingTransactionActions pendingActions);
/** 停止后重新启动Activity */
public abstract void performRestartActivity(IBinder token, boolean start);
/** 传达Activity(覆写)配置更改 */
public abstract void handleActivityConfigurationChanged(IBinder activityToken,
Configuration overrideConfig, int displayId);
/** 传达其他Activity的结果 */
public abstract void handleSendResult(IBinder token, List<ResultInfo> results,
String reason);
/** 传达多窗口模式更改通知 */
public abstract void handleMultiWindowModeChanged(IBinder token,
boolean isInMultiWindowMode, Configuration overrideConfig);
/** 传达新的意图 */
public abstract void handleNewIntent(IBinder token, List<ReferrerIntent> intents,
boolean andPause);
/** 传达图片-图片模式更改通知 */
public abstract void handlePictureInPictureModeChanged(IBinder token,
boolean isInPipMode, Configuration overrideConfig);
/** 更新窗口可见性。 */
public abstract void handleWindowVisibility(IBinder token, boolean show);
/** 执行Activity启动 */
public abstract Activity handleLaunchActivity(ActivityThread.ActivityClientRecord r,
PendingTransactionActions pendingActions, Intent customIntent);
/** 执行Activity开始 */
public abstract void handleStartActivity(ActivityThread.ActivityClientRecord r,
PendingTransactionActions pendingActions);
/** 获取包信息 */
public abstract LoadedApk getPackageInfoNoCheck(ApplicationInfo ai,
CompatibilityInfo compatInfo);
/** 传达App配置更改通知 */
public abstract void handleConfigurationChanged(Configuration config);
/** 获取与所提供token对应的ActivityThread.ActivityClientRecord实例。 */
public abstract ActivityThread.ActivityClientRecord getActivityClient(IBinder token);
/** 准备重新启动Activity以更新内部记账。这用于跟踪多个重新启动和配置更新请求。 */
public abstract ActivityThread.ActivityClientRecord prepareRelaunchActivity(
IBinder token, List<ResultInfo> pendingResults,
List<ReferrerIntent> pendingNewIntents, int configChanges,
MergedConfiguration config, boolean preserveWindow);
/** 执行Activity重新启动 */
public abstract void handleRelaunchActivity(ActivityThread.ActivityClientRecord r,
PendingTransactionActions pendingActions);
/** 报告被处理的重启请求 */
public abstract void reportRelaunch(IBinder token,
PendingTransactionActions pendingActions);
}