繁体   English   中英

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

[英]Android, How to send a message back to main thread

其实我有三个问题。。

假设我有一个function,称为ClacualTeage()和此ZC1C425268E6838E683851AB5074C174C17A94F1417 insy ins ins in tht in the in thiscr confers confers confermy confermyy in the in tht in thy zyryyzy1818。 (例如,如果用户 A 和用户 B 同时调用 function 会发生什么情况

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

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

提前致谢。

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

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

然后创建内部 class BroadcastReceiver 为,

    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);

....干杯:)

如果您在后台线程上工作,您可以使用Handler在主线程上传递结果。 但是“函数返回值”的 model 是错误的。 您需要一个异步架构。 最常见的是回调 function resultAvailable ,可以在后台线程完成工作后随时调用。 AsyncTask class 在这方面有很大帮助。

是每次创建单独的线程还是保持后台线程运行取决于您需要完成此计算的频率。 您可能希望为此使用生产者/消费者 model。 web 上有很多例子说明如何在 Java 中实现这一点。

另一种架构,可能更适合您的描述,是将您的计算代码设置为服务。 然后,您可以通过使用请求构造意图并接收结果来“调用”它。 有关详细信息,请参阅服务指南部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM