2

我正在开发一个安卓应用程序。此应用程序架构分为 5 个模块,其中 2 个模块具有多种功能。为了开发这个应用程序,我根据需要创建了 2 个进程,其中包含多个线程和 3 个其他线程。我对此实现有一些疑问:

这是一个好模型吗?如果不是,为什么不呢?现在我只考虑模块化。

我需要从 process1 中的广播接收器向 process2 中的服务线程发送消息,最好的方法是什么?

android中最好的IPC机制是什么?我尝试使用此链接http://androidapps.org.ua/androidintro_ipc_intent.html建议 startActivity 和 startActivityForResult,但这些选项在广播接收器中不可用,并且服务没有 startActivityForResult 选项。

谢谢你。

4

3 回答 3

2

使用自定义BroadcastReceiver

在ActivityA.java中写这个

 Intent intent = new Intent();
 intent.putExtra("message","hi");
 intent.setAction("com.android.activity.SEND_DATA");
 sendBroadcast(intent); 

在ServiceA.java中写这个

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
   // Extract data included in the Intent
   String message = intent.getStringExtra("message");
   Log.d("receiver", "Got message: " + message);
  }
};

现在注册Receiver

LocalBroadcastManager.getInstance(mContext).registerReceiver(mMessageReceiver,
  new IntentFilter("com.android.activity.SEND_DATA"));   
于 2013-05-07T16:09:40.787 回答
1

Intent只需在 中创建一个BroadcastReceiver,将您的数据添加为附加项,即可startService()使用Intent

Intent intent = new Intent(context, MyService.class);
intent.putExtra("message", "whatever data you need to pass to the service");
context.startService(intent);

该方法onStartCommand()将在您的服务中使用传递的Intent.

要回答您的另一个问题“什么是最好的 IPC 方法”,答案(一如既往)是“这取决于”。使用Intents 是最简单的方法,因为它支持所有开箱即用的组件。如果您需要在组件之间进行更复杂的交互,您可以考虑使用 AIDL,这将允许您在Service. 如果这还不够,那么只需在两个组件之间实现您自己的套接字协议。

于 2013-05-07T16:26:25.910 回答
-1

首先,尝试理解您的术语。通过流程,我假设您的意思是活动和“服务线程”,我假设您的意思是服务。

如果您想从 onReceive() 广播接收器(在 Activity 1 的上下文中运行)向已经处于活动状态的服务发送消息,您可以尝试以下方法之一:

1)创建一个新的intent(服务类名作为类),并用intent调用startService()。添加您需要的附加参数作为意图附加项。不管您的服务是否已经处于活动状态,仍然调用 onStartCommand(),您可以使用特殊参数作为附加意图来区分 onStartCommand() 和 onReceive。

2)如果您的方案允许这样做,请考虑在您的活动和服务中注册到相同的广播事件并采取适当的行动(然后无需传递消息)

3) 在您的服务中编写另一个广播接收器,并从 Activity 的广播接收器调用 sendBroadcast()

于 2013-05-07T16:31:06.933 回答