Android,如何将消息发送回主线程

时间:2011-05-26 01:29:37

标签: android multithreading

我实际上有三个问题..

假设我有一个名为CalcualteAge()的函数,这个函数将由多个用户调用(让我们将其视为提供此函数的简单服务器应用程序)然后我将如何处理用户之间的并发函数调用? (例如,如果用户A和用户B同时调用该函数会发生什么

另一个问题是函数(CalcualteAge())在一个单独的线程上运行,并且它有一个返回值。然后我如何将返回值传递回主线程,以便主线程可以将值返回给调用函数的人。

最后一个是哪种方式更好地实现这个?我应该创建一个新线程并在线程上运行该函数并在完成计算后终止新线程吗?或者,只要应用程序正在运行,我是否应该让线程在后台运行?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以通过广播接收器获取值......如下所示,首先创建您自己的IntentFilter,

Intent intentFilter=new IntentFilter();
intentFilter.addAction("YOUR_INTENT_FILTER");

然后创建内部类BroadcastReceiver as,

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    /** Receives the broadcast that has been fired */
    @Override
    public void onReceive(Context context, Intent intent) {
        if(intent.getAction()=="YOUR_INTENT_FILTER"){
           //HERE YOU WILL GET VALUES FROM BROADCAST THROUGH INTENT EDIT YOUR TEXTVIEW///////////
           String receivedValue=intent.getStringExtra("KEY");
        }
    }
};

现在在onResume()中注册您的广播接收器,

registerReceiver(broadcastReceiver, intentFilter);

最后在onDestroy()中取消注册BroadcastReceiver,

unregisterReceiver(broadcastReceiver);

现在最重要的部分......你需要从需要发送值的地方发射广播.....所以这样做,

Intent i=new Intent();
i.setAction("YOUR_INTENT_FILTER");
i.putExtra("KEY", "YOUR_VALUE");
sendBroadcast(i);

....欢呼:)

答案 1 :(得分:0)

如果您正在后台线程上工作,则可以使用Handler在主线程上提供结果。但是“从函数返回值”的模型是错误的。您需要一个异步架构。最常见的是回调函数resultAvailable,可以在后台线程完成其工作后随时调用。 AsyncTask课程可以为此提供很多帮助。

每次创建一个单独的线程还是保持后台线程运行取决于您完成此计算的频率。您可能希望使用生产者/消费者模型。 Web上有很多关于如何在Java中实现它的例子。

可能更适合您所描述的替代架构是将您的计算代码设置为服务。然后,您可以通过使用请求构建意图并接收结果来“调用”它。有关详细信息,请参阅guide section on Services