Android源码 - ClientTransactionHandler

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);
}
发布了19 篇原创文章 · 获赞 0 · 访问量 879

猜你喜欢

转载自blog.csdn.net/qq_32036981/article/details/103713165