Android 优雅的 Activity 回调代码封装

开发者故事集 2024-09-06 ⋅ 12 阅读

在 Android 开发中,经常需要在 Activity 的生命周期中执行一些操作,如初始化数据、发起网络请求、处理权限申请等。为了避免 Activity 代码变得臃肿,我们可以将相关的回调代码进行封装,以提高代码的可维护性和可复用性。本文将介绍一种优雅的封装方式,并提供一些实用的示例。

设计思路

  1. 将回调代码以接口的形式定义在 Activity 中。
  2. 通过一个基类 Activity 来管理回调接口的注册和调用。
  3. 在需要使用回调的子类 Activity 中实现对应的接口方法。

封装示例

1. 定义回调接口

public interface ActivityCallback {
    void onInitialized();
    void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults);
    void onNetworkRequestComplete();
    // ...其他需要的回调方法
}

2. 创建基类 Activity

public abstract class BaseActivity extends AppCompatActivity {

    private List<ActivityCallback> callbacks = new ArrayList<>();

    public void registerCallback(ActivityCallback callback) {
        callbacks.add(callback);
    }
    
    public void unregisterCallback(ActivityCallback callback) {
        callbacks.remove(callback);
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 初始化操作
        for (ActivityCallback callback : callbacks) {
            callback.onInitialized();
        }
    }
    
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        // 处理权限申请结果
        for (ActivityCallback callback : callbacks) {
            callback.onRequestPermissionsResult(requestCode, permissions, grantResults);
        }
    }
    
    // ...其他生命周期方法的调用
}

3. 子类 Activity 实现回调接口

public class MyActivity extends BaseActivity implements ActivityCallback {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_my);
        registerCallback(this);
    }
    
    @Override
    public void onInitialized() {
        // 初始化数据
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // 处理权限申请结果
    }

    @Override
    public void onNetworkRequestComplete() {
        // 网络请求完成后的操作
    }
    
    // ...其他实现的回调方法
}

4. 使用示例

public class MainActivity extends AppCompatActivity {

    private MyActivity myActivity;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        myActivity = new MyActivity();
        myActivity.registerCallback(new ActivityCallback() {
            @Override
            public void onInitialized() {
                // 初始化回调
            }
            
            @Override
            public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
                // 权限申请回调
            }

            @Override
            public void onNetworkRequestComplete() {
                // 网络请求完成回调
            }
            
            // ...其他需要实现的回调方法
        });
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        myActivity.unregisterCallback(myActivity);
    }
}

总结

通过封装 Activity 的回调代码,我们可以使 Activity 变得更加简洁、优雅。这种封装方式将回调接口作为一个约定,可以方便地添加和移除需要的回调操作,并提供可复用的基类 Activity,简化了代码的编写和维护。希望本文的示例能给你带来一些灵感,助力于 Android 开发中的实践和封装。


全部评论: 0

    我有话说: