如何将ExampleBroadcastReceiver代码合并至MainActivity类实现二合一?
能否将BroadcastReceiver类合并到MainActivity中?
当然可以!你完全可以把ExampleBroadcastReceiver作为MainActivity的私有内部类来实现代码合并,这样两个类的逻辑就能放在同一个文件里,同时功能和原来完全一致。
以下是合并后的完整代码:
import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; import android.os.Bundle; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { // 声明内部类的实例 private ExampleBroadcastReceiver exampleBroadcastReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 初始化内部类实例 exampleBroadcastReceiver = new ExampleBroadcastReceiver(); } @Override protected void onStart() { super.onStart(); IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(exampleBroadcastReceiver, filter); } @Override protected void onStop() { super.onStop(); unregisterReceiver(exampleBroadcastReceiver); } // 把ExampleBroadcastReceiver改为MainActivity的私有内部类 private class ExampleBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { boolean noConnectivity = intent.getBooleanExtra( ConnectivityManager.EXTRA_NO_CONNECTIVITY, false); if (noConnectivity) { Toast.makeText(context, "Disconnected", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(context, "Connected", Toast.LENGTH_SHORT).show(); } } } } }
关键说明:
- 将广播接收器设为
private内部类,确保它只能被MainActivity内部访问,符合封装原则 - 内部类可以直接调用外部类的成员(如果有需要),这里我们保留了原有的网络状态监听逻辑
- 注册、注销广播接收器的逻辑和原来完全一致,只是操作的对象变为内部类的实例
内容的提问来源于stack exchange,提问作者Husky
相关产品推荐
相关产品推荐

