在 Android 开发中,经常需要在 Activity 的生命周期中执行一些操作,如初始化数据、发起网络请求、处理权限申请等。为了避免 Activity 代码变得臃肿,我们可以将相关的回调代码进行封装,以提高代码的可维护性和可复用性。本文将介绍一种优雅的封装方式,并提供一些实用的示例。
设计思路
- 将回调代码以接口的形式定义在 Activity 中。
- 通过一个基类 Activity 来管理回调接口的注册和调用。
- 在需要使用回调的子类 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 开发中的实践和封装。
本文来自极简博客,作者:开发者故事集,转载请注明原文链接:Android 优雅的 Activity 回调代码封装