
# 回调注册使用建议及示例
#### 回调注册使用建议
- 按需注册：开发者应根据实际需求注册对应的回调接口，避免不必要的资源占用。
- 避免重复注册：确保同一个回调接口不会被多次注册，防止事件重复触发。
- 及时取消注册：在不再需要监听事件时，及时取消注册回调接口，避免内存泄漏。
- 线程安全：回调注册和取消注册操作应在主线程中执行，确保线程安全。
- 模块化管理：建议将不同级别的回调接口分别管理，提高代码可维护性。
 
#### 回调注册示例
注意事项：必须显示实现所有abstract回调方法，即使为空。
- 注册全局回调：
  ```
  CloudPhoneClient.setPlayerCallback(new CloudPhoneClient.Callback() {
      @Override
      public void onSuccess() {
          Log.d("CloudPhone", "连接成功");
      }
      @Override
      public void onTerminated() {
          Log.d("CloudPhone", "会话结束");
      }
      @Override
      public void onFailure(int code, String message) {
          Log.e("CloudPhone", "错误码: " + code + ", 错误信息: " + message);
      }
      // 实现 AppCallback 中的方法
      @Override
      public void onStartApp(AppOperateResponse<String> appOperateResponse) {
          if (appOperateResponse.isSuccess()) {
              Log.d("CloudPhone", "应用启动成功: " + appOperateResponse.getData());
          } else {
              Log.e("CloudPhone", "应用启动失败: " + appOperateResponse.getMessage());
          }
      }
      @Override
      public void onGetRunningApps(AppOperateResponse<GetAppsRsp> appOperateResponse) {
          if (appOperateResponse.isSuccess()) {
              GetAppsRsp appsRsp = appOperateResponse.getData();
              Log.d("CloudPhone", "正在运行的应用: " + appsRsp.getApps().toString());
          } else {
              Log.e("CloudPhone", "获取运行应用失败: " + appOperateResponse.getMessage());
          }
      }
      // 其他方法可以不实现，前提是它们不是 abstract 的
  });
  ```
  
- 分别注册需要的回调：
  ```
  // 注册应用级回调
  CloudPhoneClient.setAppCallback(new CloudPhoneClient.Callback.AppCallback() {
      @Override
      public void onStartApp(AppOperateResponse<String> appOperateResponse) {
          if (appOperateResponse.isSuccess()) {
              Log.d("CloudPhone", "应用启动成功: " + appOperateResponse.getData());
          } else {
              Log.e("CloudPhone", "应用启动失败: " + appOperateResponse.getMessage());
          }
      }
      // 其他应用级回调方法实现...
  });
  // 注册系统级回调
  CloudPhoneClient.setSysCallback(new CloudPhoneClient.Callback.SysCallBack() {
      @Override
      public void onVolumeControl(AppOperateResponse<VolumeDTO> appOperateResponse) {
          if (appOperateResponse.isSuccess()) {
              VolumeDTO volumeDTO = appOperateResponse.getData();
              Log.d("CloudPhone", "音量控制结果: " + volumeDTO.getVolume());
          } else {
              Log.e("CloudPhone", "音量控制失败: " + appOperateResponse.getMessage());
          }
      }
      // 其他系统级回调方法实现...
  });
  ```
  
- Activity类直接implements（实现）对应回调接口类，并在初始化Activity时注册回调CloudPhoneClient.setPlayerCallback(this);：
  ```
  public class MyCloudPhoneActivity extends Activity implements CloudPhoneClient.Callback {
      private PlayerFragment mPlayerFragment;
      private void initPlayer() {
          mPlayerFragment = (PlayerFragment) getFragmentManager().findFragmentById(com.nbc.acsdk.android.R.id.fragment_player);
          CloudPhoneClient.bindFragment(mPlayerFragment);
          getFragmentManager().beginTransaction().show(mPlayerFragment).commit();
          CloudPhoneClient.setPlayerCallback(this);
          CloudPhoneClient.start(mPlayerFragment, getIntent().getExtras());
      }
      // 只实现关心的回调方法
      @Override
      public void onSuccess() {
          Log.d("CloudPhone", "连接成功");
      }
      @Override
      public void onFailure(int code, String message) {
          Log.e("CloudPhone", "错误码: " + code + ", 错误信息: " + message);
      }
      // 实现 AppCallback 中的方法
      @Override
      public void onStartApp(AppOperateResponse<String> appOperateResponse) {
          if (appOperateResponse.isSuccess()) {
              Log.d("CloudPhone", "应用启动成功: " + appOperateResponse.getData());
          } else {
              Log.e("CloudPhone", "应用启动失败: " + appOperateResponse.getMessage());
          }
      }
      @Override
      public void onGetRunningApps(AppOperateResponse<GetAppsRsp> appOperateResponse) {
          if (appOperateResponse.isSuccess()) {
              GetAppsRsp appsRsp = appOperateResponse.getData();
              Log.d("CloudPhone", "正在运行的应用: " + appsRsp.getApps().toString());
          } else {
              Log.e("CloudPhone", "获取运行应用失败: " + appOperateResponse.getMessage());
          }
      }
      // 其他方法可以不实现，不会被调用
  }
  ```
  
 
