Android手写占位式插件化框架之Activity通信、Service通信和BroadcastReceiver通信
发布人:shili8
发布时间:2024-12-24 07:25
阅读次数:0
**Android 手写占位式插件化框架之 Activity 通信、Service 通信和 BroadcastReceiver 通信**
在 Android 应用开发中,插件化框架是为了实现应用的模块化设计和扩展性而生的。手写占位式插件化框架是一种基于 Android 的插件化解决方案,它允许开发者通过编程方式来定义和管理插件之间的通信关系。
在本文中,我们将重点讨论 Activity 通信、Service 通信和 BroadcastReceiver 通信这三个方面的实现原理和代码示例。
**一、Activity 通信**
Activity 通信是指两个或多个 Activity 之间通过编程方式来交换数据和事件的过程。手写占位式插件化框架提供了以下几种方式来实现 Activity 通信:
###1.1 Intent 方式Intent 是 Android 中一个非常重要的组件,它可以用来传递数据、启动 Activity 或 Service 等。
java// 发送 Intentpublic class MainActivity extends AppCompatActivity { public static final String ACTION_SEND_DATA = "com.example.action.send_data"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... Intent intent = new Intent(ACTION_SEND_DATA); intent.putExtra("key", "value"); sendBroadcast(intent); } } // 接收 Intentpublic class SecondActivity extends AppCompatActivity { private BroadcastReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String value = intent.getStringExtra("key"); Log.d("SecondActivity", "Received data: " + value); } }; IntentFilter filter = new IntentFilter(MainActivity.ACTION_SEND_DATA); registerReceiver(receiver, filter); } }
###1.2 Binder 方式Binder 是 Android 中一个用于进程间通信的机制,它可以用来传递数据和事件。
java// 发送 Binderpublic class MainActivity extends AppCompatActivity { public static final String ACTION_SEND_DATA = "com.example.action.send_data"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... IBinder binder = new Binder(); Intent intent = new Intent(ACTION_SEND_DATA); intent.putExtra("binder", binder); sendBroadcast(intent); } } // 接收 Binderpublic class SecondActivity extends AppCompatActivity { private BroadcastReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { IBinder binder = (IBinder) intent.getParcelableExtra("binder"); Log.d("SecondActivity", "Received Binder: " + binder); } }; IntentFilter filter = new IntentFilter(MainActivity.ACTION_SEND_DATA); registerReceiver(receiver, filter); } }
###1.3 ContentProvider 方式ContentProvider 是 Android 中一个用于共享数据的机制,它可以用来传递数据和事件。
java// 发送 ContentProviderpublic class MainActivity extends AppCompatActivity { public static final String ACTION_SEND_DATA = "com.example.action.send_data"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... ContentValues values = new ContentValues(); values.put("key", "value"); getContentResolver().insert(Uri.parse(ACTION_SEND_DATA), values); } } // 接收 ContentProviderpublic class SecondActivity extends AppCompatActivity { private BroadcastReceiver receiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // ... receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Uri uri = intent.getData(); Cursor cursor = getContentResolver().query(uri, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { String value = cursor.getString(cursor.getColumnIndex("key")); Log.d("SecondActivity", "Received data: " + value); } } }; IntentFilter filter = new IntentFilter(MainActivity.ACTION_SEND_DATA); registerReceiver(receiver, filter); } }
**二、Service 通信**
Service 通信是指两个或多个 Service 之间通过编程方式来交换数据和事件的过程。手写占位式插件化框架提供了以下几种方式来实现 Service 通信:
###2.1 Binder 方式Binder 是 Android 中一个用于进程间通信的机制,它可以用来传递数据和事件。
java// 发送 Binderpublic class MyService extends Service { public static final String ACTION_SEND_DATA = "com.example.action.send_data"; @Override public IBinder onBind(Intent intent) { return new Binder(); } } // 接收 Binderpublic class SecondService extends Service { private BroadcastReceiver receiver; @Override public void onCreate() { super.onCreate(); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { IBinder binder = (IBinder) intent.getParcelableExtra("binder"); Log.d("SecondService", "Received Binder: " + binder); } }; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // ... IntentFilter filter = new IntentFilter(MyService.ACTION_SEND_DATA); registerReceiver(receiver, filter); return super.onStartCommand(intent, flags, startId); } }
###2.2 AIDL 方式AIDL 是 Android 中一个用于定义接口的机制,它可以用来传递数据和事件。
java// 发送 AIDLpublic interface IMyService extends android.os.IInterface { void sendData(String data) throws RemoteException; } // 接收 AIDLpublic class SecondService extends Service { private BroadcastReceiver receiver; @Override public void onCreate() { super.onCreate(); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { IMyService service = IMyService.Stub.asInterface(intent.getParcelableExtra("service")); String data = service.sendData("Hello, World!"); Log.d("SecondService", "Received data: " + data); } }; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // ... IntentFilter filter = new IntentFilter(MyService.ACTION_SEND_DATA); registerReceiver(receiver, filter); return super.onStartCommand(intent, flags, startId); } }
###2.3 ContentProvider 方式ContentProvider 是 Android 中一个用于共享数据的机制,它可以用来传递数据和事件。
java// 发送 ContentProviderpublic class MyService extends Service { public static final String ACTION_SEND_DATA = "com.example.action.send_data"; @Override public void onCreate() { super.onCreate(); ContentValues values = new ContentValues(); values.put("key", "value"); getContentResolver().insert(Uri.parse(ACTION_SEND_DATA), values); } } // 接收 ContentProviderpublic class SecondService extends Service { private BroadcastReceiver receiver; @Override public void onCreate() { super.onCreate(); receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Uri uri = intent.getData(); Cursor cursor = getContentResolver().query(uri, null, null, null, null); if (cursor != null && cursor.moveToFirst()) { String value = cursor.getString(cursor.getColumnIndex("key")); Log.d("SecondService", "Received data: " + value); } } }; } @Override public int onStartCommand(Intent intent, int flags, int startId) { // ... IntentFilter filter = new IntentFilter(MyService.ACTION_SEND_DATA); registerReceiver(receiver, filter); return super.onStartCommand(intent, flags, startId); } }
**三、BroadcastReceiver 通信**
BroadcastReceiver 通信是指两个或多个 BroadcastReceiver 之间通过编程方式来交换数据和事件的过程。手写占位式插件化框架提供了以下几种方式来实现 BroadcastReceiver 通信:
###3.1 Intent 方式Intent 是 Android 中一个非常重要的组件,它可以用来传递数据、启动 Activity 或 Service 等。
java// 发送 Intentpublic class MyReceiver extends BroadcastReceiver { public static final String ACTION_SEND_DATA = "com.example.action.send_data"; @Override public void onReceive(Context context, Intent intent) { // ... Intent broadcastIntent = new Intent(ACTION_SEND_DATA); broadcastIntent.putExtra("key", "value"); sendBroadcast(broadcastIntent); } } // 接收 Intentpublic class SecondReceiver extends BroadcastReceiver { private BroadcastReceiver receiver; @Override public void onReceive(Context context, Intent intent) { // ... receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent)